我有这个查询
SELECT DISTINCT visitors_table.name, visitors_table.visitor_submitted
FROM visitors_table
LEFT JOIN list_data
ON visitors_table.vid = list_data.id
WHERE visitors_table.cid='2050' AND list_data.seed != '1'
结果是这样的
aaron 0000-00-00 00:00:00
brandon 2016-05-24 09:48:27
will 0000-00-00 00:00:00
amy 0000-00-00 00:00:00
amy 2016-05-24 17:14:27
amy 2016-05-24 17:20:00
我想选择日期等于 0000-00-00 00:00:00 的所有记录,但如果该人有另一条日期不全为零的记录,那么我不想选择该人。
所以我可以做到这一点
SELECT DISTINCT visitors_table.name, visitors_table.visitor_submitted
FROM visitors_table
LEFT JOIN list_data
ON visitors_table.vid = list_data.id
WHERE visitors_table.cid='2050' AND list_data.seed != '1' AND visitors_table.visitor_submitted='0000-00-00 00:00:00'
但这给出了这个结果
aaron 0000-00-00 00:00:00
will 0000-00-00 00:00:00
amy 0000-00-00 00:00:00
这不是我想要的结果。我想要这个结果,因为艾米有多个带有和不带有零日期的条目。
aaron 0000-00-00 00:00:00
will 0000-00-00 00:00:00
你会怎么做?
最佳答案
首先,获取日期等于 0000-00-00 00:00:00
的所有日期,然后过滤掉日期不是 0000-00-00 00:00 的日期:00
SELECT DISTINCT visitors_table.name, visitors_table.visitor_submitted
FROM visitors_table
LEFT JOIN list_data
ON visitors_table.vid = list_data.id
WHERE visitors_table.cid='2050' AND list_data.seed != '1' AND visitors_table.visitor_submitted = '0000-00-00 00:00:00'
and visitors_table.name not in
(SELECT DISTINCT visitors_table.name
FROM visitors_table
LEFT JOIN list_data
ON visitors_table.vid = list_data.id
WHERE visitors_table.cid='2050' AND list_data.seed != '1' AND visitors_table.visitor_submitted <> '0000-00-00 00:00:00')
如果您没有适当的索引并且查询对您来说太慢,您可以通过连接等以不同的方式执行相同的操作
关于mysql - 如果表中多次出现相同的名称,并且某个列有 2 种不同类型的数据,则不要选择任何具有该名称的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37448793/