3 回答

TA貢獻1839條經驗 獲得超15個贊
該where子句過濾掉行left join不成功的行。將其移至聯接:
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貢獻1850條經驗 獲得超11個贊
在制作OUTER JOIN(ANSI-89或ANSI-92)時,過濾位置很重要,因為在創建JOIN之前ON應用了子句中指定的條件。進行JOIN后,將應用針對子句中提供的OUTER JOINed表的條件。這會產生非常不同的結果集。相比之下,如果or 子句中提供了條件,則對于INNER JOINs而言無關緊要-結果將是相同的。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貢獻1854條經驗 獲得超8個贊
如果我正確理解了您的問題,那么您需要設置數據庫中的記錄,如果它們沒有跨character_settings表的聯接,或者該聯接記錄的character_id = 1。
因此,您應該這樣做
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 關注
- 517 瀏覽
添加回答
舉報