检查JOIN是否存在,如果存在则列不相等

时间:2018-12-04 11:02:03

标签: mysql

我有两个桌子

channel_titles
channel_grid

channel_grid内有一个名为col_id_15的列。

我需要查询entry_id其中

  1. entry_id表中的channel_grid 不存在
  2. 或者如果entry_id表中确实存在channel_grid,则col_id_15 不等于1

我曾以为下列方法可行。

SELECT ct.entry_id
FROM channel_titles AS ct
LEFT JOIN channel_grid AS g ON g.entry_id = ct.entry_id                      
WHERE g.col_id_15 != '1'

有人能帮忙吗?

3 个答案:

答案 0 :(得分:1)

根据您的两个要求,这应该可行:

SELECT ct.entry_id
FROM channel_titles AS ct
LEFT JOIN channel_grid AS g ON ct.entry_id = g.entry_id                      
WHERE g.entry_id IS NULL OR g.col_id_15 <> '1'

只需确保g.col_id_15是varchar,因为单引号会将其视为字符串而不是数字。如果它实际上是一个INT,则可以将单引号引起来。

答案 1 :(得分:0)

您的查询似乎正确。但是,如果要获取channel_grid表中不存在的所有entry_id,则必须检查g.entry_id等于NULL。

SELECT ct.entry_id
FROM channel_titles AS ct
LEFT JOIN channel_grid AS g ON g.entry_id = ct.entry_id                      
WHERE g.entry_id IS NULL OR g.col_id_15 != '1'

该条件是必需的,因为将任何值与NULL进行比较总是返回NULL。例如:

SELECT NULL != '1' // return NULL

答案 2 :(得分:0)

SELECT ct.entry_id FROM channel_titles AS ct 左联接channel_grid AS g ON g.entry_id = ct.entry_id
g.col_id_15 <> 1或g.entry_id IS NULL

好吧,我认为您的问题可以进一步简化,以便于理解。