如何在SQL select语句中执行此操作..
考虑到我有这张表
ID_A - DATE1 - DATE2
=====================
CD99 - 11/25 - 12/08
AB23 - 11/20 - 11/22
AB23 - 11/22 - 12/01
XP72 - 11/23 - 12/08
你会注意到ID_A = AB23有两个条目,第一行的DATE2等于第二行的DATE1 ,这意味着这两行是连接的。
那么,我如何获取或创建我的select语句来查看彼此相连的这些行?
编辑: 我在select语句中尝试做的是: 一个。如果不为null,请检查DATE2 湾从那里,检查DATE2是否存在于整个表的DATE1中并返回列的值。
我想得到的应该是这样的:
ID_A - DATE1 - DATE2
=====================
AB23 - 11/20 - 11/22
AB23 - 11/22 - 12/01
P.S。我希望不要使用循环这样做。因为当我得到太多的数据时,这往往会让服务器响应太慢。 - 请注意,我正在比较同一数据库中的列。
@fthiella 这是我的示例数据,方案即时指代..
ID_A - DATE1 - DATE2
=====================
CD99 - 11/25 - 12/08
AB23 - 11/20 - 11/22
AB23 - 11/22 - 12/01
XP72 - 11/23 - 12/08
PQ10 - 11/20 - -n/a-
LM88 - 11/21 - -n/a-
PQ10 - 11/15 - 11/20
从那里我想得到这些:
ID_A - DATE1 - DATE2
=====================
CD99 - 11/25 - 12/08
AB23 - 11/22 - 12/01
XP72 - 11/23 - 12/08
这里有一个快速解释为什么我排除其他人:
ID_A - DATE1 - DATE2
=====================
CD99 - 11/25 - 12/08 - not excluded
AB23 - 11/20 - 11/22 - excluded because DATE2 is connected to DATE1 of same ID_A
AB23 - 11/22 - 12/01 - not excluded
XP72 - 11/23 - 12/08 - not excluded
PQ10 - 11/20 - -n/a- - excluded because DATE2 is null
LM88 - 11/21 - -n/a- - excluded because DATE2 is null
PQ10 - 11/15 - 11/20 - excluded because DATE2 is connected to DATE1 of same ID_A (regardless if DATE2 of that line is null)
条件的优先级可以是 - 首先排除null DATE2,然后检查比较并排除其他行之前的那些行。
很抱歉因为你有这么多时间,我真的很感谢你给予我的每一个帮助..现在这个问题可以被标记为答案,再次感谢fthiella ..
答案 0 :(得分:1)
SELECT date1.* FROM DATES date1 JOIN DATES date2 On date1.ID_A = date1.ID_A
WHERE date1.DATE2 = date2.DATE1
UNION
SELECT D2.* FROM DATES date1 JOIN DATES date2 On date1.ID_A = date2.ID_A
WHERE date1.DATE2 = date2.DATE1
答案 1 :(得分:0)
你可以试试这个
SELECT D1.* FROM DATES D1
JOIN DATES D2
On D1.ID_A = D2.ID_A
WHERE D1.DATE2 = D2.DATE1
UNION
SELECT D2.* FROM DATES D1
JOIN DATES D2
On D1.ID_A = D2.ID_A
WHERE D1.DATE2 = D2.DATE1
答案 2 :(得分:0)
我会这样做:
SELECT
your_table.*
FROM
your_table inner join your_table your_table_1
on your_table.ID_A=your_table_1.ID_A
and (your_table.DATE2 = your_table_1.DATE1
or your_table.DATE1 = your_table_1.DATE2)
我正在使用your_table
加入inner join
,因此只有在每一行都有连接时才会返回行(同一ID_A,DATE2 = DATE1或DATE1 = DATE2)。 / p>
编辑,根据您的评论,这应该会为您提供没有连接的记录:
SELECT your_table.*
FROM
your_table left join your_table your_table_1
on your_table.ID_A=your_table_1.ID_A
and (your_table.DATE2 = your_table_1.DATE1)
WHERE your_table_1.ID_A is null
and your_table.DATE2 is not null
这里我使用左连接加入your_table
,使用ID_A过滤结果为空。这意味着此查询将返回your_table中的每条记录,但在同一个表中DATE2等于DATE1的记录除外。如果DATE2已经为null,则连接将不会成功,因此将返回行。