Sql 查找列上具有特定条件的行

Sql 查找列上具有特定条件的行,sql,Sql,我正在尝试进行一个sql查询,在这里我将比较所有行并检查它们的列。使用条件I将显示需要的行 我做了这一个,我得到了一个错误消息“未知列”,有什么想法如何修复它 select * from table1 as tb1 where DATE_FORMAT(start_datetime, '%H:%i:%s') in ( select DATE_FORMAT(start_datetime, '%H:%i:%s') from table1 as tb2 group by DATE_FOR

我正在尝试进行一个sql查询,在这里我将比较所有行并检查它们的列。使用条件I将显示需要的行

我做了这一个,我得到了一个错误消息“未知列”,有什么想法如何修复它

select * from table1 as tb1 where DATE_FORMAT(start_datetime, '%H:%i:%s') in (
    select DATE_FORMAT(start_datetime, '%H:%i:%s') from table1 as tb2
    group by DATE_FORMAT(start_datetime, '%H:%i:%s') having count(*) > 2 AND (end_datetime = start_datetime) OR (tb1.code = tb2.code)                                     
) AND user_id = 1
为了解释我想做什么,我搜索具有相同时间的行,然后如果start_datetime等于end_datetime,或者行具有相同的代码

在这个
我的sql查询应该返回最后4行,2行是因为它们具有相同的start_datetime和end_datetime,2行是因为它们在start_datetime上具有相同的时间,相同的代码和end_datetime为NULL,尽管我们无法看到任何错误,因为您没有提供模式“fs1.code”和“fs2.code”似乎没有引用语句中定义的表别名。确实定义的别名是“tb1”和“tb2”,它们不匹配。

您可以在两个数据集之间使用“union all”运算符

    select code,start_datetime,end_datetime from table2
    where  start_datetime=end_datetime

    union all

select t2.code,t2.start_datetime,t2.end_datetime from 
    (
    select code,start_datetime,end_datetime from table2
    where  start_datetime!=end_datetime
    and end_datetime is null    
    ) as t2
inner join ( select code table2 group by DATE_FORMAT(start_datetime, '%H:%i:%s'),code having count(*)>=2 )as t1 on t2.code=t1.code

请使用一些示例数据和预期输出进行更新。我用数据库中的一个示例更新了我的问题。请检查
tb1。code
列是否实际存在于表1中。tb1是表1,tb2是表1,实际上是同一个表。很抱歉,我错过了它。我更新了我的问题,实际上问题是当比较“tb1.code”和“tb2.code”时,这不完全是我想要的,但我正在尝试修改它。@如果您共享源表的数据集和预期的输出,我想我会帮您更多