正在尝试生成select查询。这是我的表,让我们调用第一列“id”,第二列“two”,第三列“three”,最后一列“date\u time”我有这张table。我希望所有的行都等于7(在列'three'上),除非有一个条目等于8(在列'three'上)。例如,我想要id为6而不是id为8的行(因为另一行输入了8)我能够得到行,但是一旦有另一个8的条目存在,它就不会返回任何内容(使用not exists)谢谢。
iqjalb3h1#
我们可以通过 EXISTS 查询:
EXISTS
SELECT id, two, three, date_time FROM yourTable t1 WHERE three = 7 AND NOT EXISTS (SELECT 1 FROM yourTable t2 WHERE t2.three = t1.id);
这种方法可能会比反连接方法更好。
rqdpfwrv2#
您可以使用self-join来获得结果
select A.* from table_name A left join table_name B on A.id = B.three where A.three = 7 and B.three is null;
在上面的查询中,它将获得表a的所有行,其中列'three'的值为7,然后它将为表b的列'three'赋值null,其中列'id'在表b的列'three'中找不到。
li9yvcax3#
对您的需求的描述不是100%清楚,但是我认为您需要列3=7的那些行,但是除了那些列id存在于表的列3的其他地方的行之外。这应该起作用:
SELECT `id`, `two`, `three`, `date_time` FROM `yourtable` WHERE `three` = 7 AND `id` NOT IN (SELECT `three` FROM `yourtable`)
crcmnpdw4#
你可以用 exists 作为
exists
select * from tab t1 where t1.three = 7 and exists ( select 1 from tab t2 where t2.id = t1.id and t1.id != 8 ); id two three date_time --- ---- ----- ------------------- 6 4 7 2018-12-17 16:56:41
rextester演示
6kkfgxo05#
如果我正确理解你的问题,我相信下面的代码可以解决你的问题。
SELECT A.ID, A.TWO, A.THREE, A.DATE_TIME FROM TABLE A LEFT JOIN TABLE B ON A.TWO=B.TWO AND B.THREE=8 AND A.ID<>B.ID WHERE B.ID IS NULL AND A.THREE=7
5条答案
按热度按时间iqjalb3h1#
我们可以通过
EXISTS
查询:演示
这种方法可能会比反连接方法更好。
rqdpfwrv2#
您可以使用self-join来获得结果
在上面的查询中,它将获得表a的所有行,其中列'three'的值为7,然后它将为表b的列'three'赋值null,其中列'id'在表b的列'three'中找不到。
li9yvcax3#
对您的需求的描述不是100%清楚,但是我认为您需要列3=7的那些行,但是除了那些列id存在于表的列3的其他地方的行之外。
这应该起作用:
crcmnpdw4#
你可以用
exists
作为rextester演示
6kkfgxo05#
如果我正确理解你的问题,我相信下面的代码可以解决你的问题。