3 回答

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
該where子句過濾掉行l(wèi)eft join不成功的行。將其移至聯(lián)接:
SELECT `settings`.*, `character_settings`.`value`
FROM `settings`
LEFT JOIN
`character_settings`
ON `character_settings`.`setting_id` = `settings`.`id`
AND `character_settings`.`character_id` = '1'

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
在制作OUTER JOIN(ANSI-89或ANSI-92)時(shí),過濾位置很重要,因?yàn)樵趧?chuàng)建JOIN之前ON應(yīng)用了子句中指定的條件。進(jìn)行JOIN后,將應(yīng)用針對(duì)子句中提供的OUTER JOINed表的條件。這會(huì)產(chǎn)生非常不同的結(jié)果集。相比之下,如果or 子句中提供了條件,則對(duì)于INNER JOINs而言無關(guān)緊要-結(jié)果將是相同的。WHEREONWHERE
SELECT s.*,
cs.`value`
FROM SETTINGS s
LEFT JOIN CHARACTER_SETTINGS cs ON cs.setting_id = s.id
AND cs.character_id = 1

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果我正確理解了您的問題,那么您需要設(shè)置數(shù)據(jù)庫中的記錄,如果它們沒有跨character_settings表的聯(lián)接,或者該聯(lián)接記錄的character_id = 1。
因此,您應(yīng)該這樣做
SELECT `settings`.*, `character_settings`.`value`
FROM (`settings`)
LEFT OUTER JOIN `character_settings`
ON `character_settings`.`setting_id` = `settings`.`id`
WHERE `character_settings`.`character_id` = '1' OR
`character_settings`.character_id is NULL
- 3 回答
- 0 關(guān)注
- 513 瀏覽
添加回答
舉報(bào)