尝试建立选择查询。
这是我的表,我们将第一列称为“ id”,第二列称为“ two”,第三列称为“三”,最后一列称为“ date_time”
我有这张桌子。我要获得所有等于7(在“三”列上)的行,除非存在等于8(在“三”列上)的条目。
例如,我想要ID为6但非ID为8的行(因为另一行输入了8)
我能够获得这些行,但是一旦另一个具有8的条目存在,它根本不会返回任何内容(使用不存在)
谢谢。
答案 0 :(得分:1)
我们可以通过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);
这种方法可能胜过反联接。
答案 1 :(得分:1)
您可以使用自我加入来获得结果
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中获得所有行,其中列“三”的值为7,然后将空值分配给表B的列“三”,其中在表“列”中未找到A表的列“ id” B表的三个”。
答案 2 :(得分:0)
The description of your requirement is not 100% clear, but I think you want to ask for those rows where column three = 7, but except for those rows where the ID of that row exists elsewhere in column three of the table.
This should work:
SELECT
`id`, `two`, `three`, `date_time`
FROM
`yourtable`
WHERE
`three` = 7
AND `id` NOT IN (SELECT `three` FROM `yourtable`)
答案 3 :(得分:0)
如果我正确理解了您的问题,我相信以下代码将解决您的问题。
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
答案 4 :(得分:0)
您可以将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