停止在连接上返回多个相似的行
Stop returning multiple similar rows on joins
我在 SQLite 中有以下场景。
TableA
ID
-----
1 |
2 |
3 |
Table B
ID | AID |Tag
----------------
1 | 1 | Hide
2 | 1 | Show
3 | 2 | Null
4 | 3 | Show
Table B 的 AID 列是 table A 的 ID。
在上面的例子中
Table ID: '1' 有
-> Table“1”和“2”的 B ID 以及附加的标签 'Hide' 和 'Show'。
我正在寻找一个 SQL,它只会 return,在上面的示例中,Table A ID:“2”和“3”。
基本上,因为 TableA ID: '1' 附加了一个 'Hide' 标签,所以不要 return 它(即使它也附加了一个显示标签)
我正在使用的SQL是(请原谅名字,这只是一个简单的例子)
select
a.ID as a_ID,
b.ID as b_ID,
b.Tag as Tag
from
Table A as a
left join Table B on a.id = b.aID
and b.tag != 'hide'
这个 SQL 的问题还在 returning
a_ID | b_ID | Tag
-------------------------------
1 | 2 | Show
我有点卡住了,非常感谢任何帮助。我不是 100% 确定我将如何处理 google 搜索。
我得到的最接近的是这个问题 How to return only 1 row if multiple duplicate rows and still return rows that are not duplicates?
但我不知道 GROUP BY 在这里有什么帮助。
您可以使用带有 exists
运算符的额外条件:
SELECT a.ID AS a_ID, b.ID AS b_ID, b.Tag AS Tag
FROM table_a a
LEFT JOIN table_b b ON a.id = b.aID
WHERE NOT EXISTS (SELECT *
FROM table_b bin
WHERE bin.aID = a.ID AND bin.Tag = 'hide')
您正在查找 id
,其中不存在带有 'hide' 标记的行。这是直接翻译成 SQL:
select *
from TableA as a
where not exists
(
select *
from TableB as B
where a.id = b.aID
and b.tag = 'hide'
)
或者,如果您想要表 B 中的数据:
select *
from TableB as t1
where not exists
(
select *
from TableB as t2
where t1.aID = t2.aID
and t2.tag = 'hide'
)
我在 SQLite 中有以下场景。
TableA
ID
-----
1 |
2 |
3 |
Table B
ID | AID |Tag
----------------
1 | 1 | Hide
2 | 1 | Show
3 | 2 | Null
4 | 3 | Show
Table B 的 AID 列是 table A 的 ID。
在上面的例子中 Table ID: '1' 有 -> Table“1”和“2”的 B ID 以及附加的标签 'Hide' 和 'Show'。
我正在寻找一个 SQL,它只会 return,在上面的示例中,Table A ID:“2”和“3”。 基本上,因为 TableA ID: '1' 附加了一个 'Hide' 标签,所以不要 return 它(即使它也附加了一个显示标签)
我正在使用的SQL是(请原谅名字,这只是一个简单的例子)
select
a.ID as a_ID,
b.ID as b_ID,
b.Tag as Tag
from
Table A as a
left join Table B on a.id = b.aID
and b.tag != 'hide'
这个 SQL 的问题还在 returning
a_ID | b_ID | Tag
-------------------------------
1 | 2 | Show
我有点卡住了,非常感谢任何帮助。我不是 100% 确定我将如何处理 google 搜索。 我得到的最接近的是这个问题 How to return only 1 row if multiple duplicate rows and still return rows that are not duplicates? 但我不知道 GROUP BY 在这里有什么帮助。
您可以使用带有 exists
运算符的额外条件:
SELECT a.ID AS a_ID, b.ID AS b_ID, b.Tag AS Tag
FROM table_a a
LEFT JOIN table_b b ON a.id = b.aID
WHERE NOT EXISTS (SELECT *
FROM table_b bin
WHERE bin.aID = a.ID AND bin.Tag = 'hide')
您正在查找 id
,其中不存在带有 'hide' 标记的行。这是直接翻译成 SQL:
select *
from TableA as a
where not exists
(
select *
from TableB as B
where a.id = b.aID
and b.tag = 'hide'
)
或者,如果您想要表 B 中的数据:
select *
from TableB as t1
where not exists
(
select *
from TableB as t2
where t1.aID = t2.aID
and t2.tag = 'hide'
)