SQL LEFT JOIN 与来自另一列的 where 子句

SQL LEFT JOIN with where clause from another column

我正在尝试连接两列,其中条件基于右侧 table 中的删除和活动列。

查询->

SELECT
    `s`.`slider_id` as `id`,
    `s`.`slider_type` as `type`,
    `s`.`slider_name` as `name`,
    `sd`.`slider_data_type` AS `sd_type`,
    `sd`.`slider_data_value` AS `sd_value`,
    `sd`.`slider_data_group` AS `sd_group`,
    `sd`.`slider_data_id` AS `sd_id`
FROM `sliders` AS `s`
LEFT OUTER JOIN `slider_data` AS `sd`
    ON `s`.`slider_id` = `sd`.`slider_data_s_id`
WHERE
    `s`.`slider_id` = '11' AND
    ( ( `sd`.`slider_data_active` = 1 AND `sd`.`slider_data_delete` =0 ) OR
      ( `sd`.`slider_data_active` IS NULL AND `sd`.`slider_data_delete` IS NULL ) )

当另一个或 RIGHT table 中没有符合条件的记录时,查询工作正常。但不是

`sd`.`slider_data_active` = 0 AND `sd`.`slider_data_delete` = 1

当右侧 table 中的活动列和删除列为 0 和 1

时,我仍想从主要或左侧检索数据 table

Active 0和delete 1将等于右栏中的NULL

有什么解决办法吗?

WHERE子句中的AND条件移动到table加入条件(ON),当你使用LEFT JOINEDtable时WHERE 子句然后它开始表现得像 INNER JOIN 并且只在找到完全匹配时给出结果。

SELECT `s`.`slider_id` as `id`, `s`.`slider_type` as `type`, `s`.`slider_name` as `name`, `sd`.`slider_data_type` AS `sd_type`, `sd`.`slider_data_value` AS `sd_value`, `sd`.`slider_data_group` AS `sd_group`, `sd`.`slider_data_id` AS `sd_id` 
FROM `sliders` AS `s` 
LEFT OUTER JOIN `slider_data` AS `sd` ON `s`.`slider_id` = `sd`.`slider_data_s_id` AND ( ( `sd`.`slider_data_active` = 1 AND `sd`.`slider_data_delete` =0 ) OR ( `sd`.`slider_data_active` IS NULL AND `sd`.`slider_data_delete` IS NULL ) )
WHERE `s`.`slider_id` = '11'