我正在尝试为下面的表编写SQL连接查询。
我正在尝试获得预期表
唯一的连接条件是,如果在表1中,操作的值是'D',即删除,则表2中相应行的值应为空。
基于键联接的表。
数据库:帖子
表1
id | operation| keys|
-----------------------
1 | I | 1 |
2 | U | 2 |
3 | D | 3 |
表二
id |keys| col1| col2
-----------------------
1 | 1 | xyz | abc
2 | 2 | yxz | cba
3 | 3 | zxy | bac
预期输出
id | operation| keys| col1| col2
---------------------------------
1 | I | 1 | xyz |abc
2 | U | 2 | yxz |cba
3 | D | 3 | NULL|NULL
2条答案
按热度按时间hfyxw5xn1#
您可以使用
CASE WHEN
来得到您想要的结果。基本上,查询看起来如下:我不知道你是否真的想做左连接,或者你是否需要一个内连接。我也不知道你是否会同时连接id和keys列,或者只连接其中的一列。所以查询会产生你的例子所期望的结果,但是你必须检查这些东西,请。最后注意:当然,您甚至可以删除“CASE WHEN”结构,并将!= 'D'条件放在左连接中。我没有提出这样做,因为“CASE WHEN”结构允许您在必要时为col 1和col 2选择不同的值,因此更加灵活。
polkgigr2#
我想你可以用正确的条件写一个
left join
语句,在这个例子中是table_1.keys = table_2.keys and table_1.operation != 'D'
,这将连接第二个表,你将在条件为false
的列中得到null
。请参阅sqldaddy.io上的演示