gpt4 book ai didi

mysql - 在相关/查找表上选择不相关的 ID

转载 作者:行者123 更新时间:2023-11-29 05:30:07 24 4
gpt4 key购买 nike

我已经看到了各种例子,但我找不到一个明确的例子来说明如何从 table_A 返回所有行。与 table_B 中的行无关使用相关 table_A_B table_A.id 都没有给定值或 table_B.id .我能找到的最接近的匹配项是:

  1. 获取 A 的列表与 B 中的一行或多行无关但不知道 B 中的哪个值是问题所在。

  2. 获取 A 的列表与给定的B无关.

  3. 获取 A 的列表用逗号分隔的无关字段B (不确定我是否看到了,但似乎一个例子可以这样扩展)。

  4. 列表A s 和 B它们彼此不相关,但没有迹象表明它们彼此不相关。

我还可以获得所有潜在的列表 A_B元组:

SELECT A.id, B.id  FROM A
INNER JOIN B ON A.id <> B.id

我可以假设使用 EXCEPT 之一针对相关表的解决方法(我认为),但所有尝试均未成功,我想一旦该连接返回数百万个潜在组合,它的效率就会大大降低。

所以给定表值:

A
id | name
1 | X
2 | y
3 | z


B
id | name
7 | e
8 | f
9 | g

A_B
id | a_id | b_id
1 | 1 | 7
2 | 1 | 8
3 | 1 | 9
1 | 2 | 7
2 | 2 | 8
1 | 3 | 7

是否有一个查询会返回: 一个|乙 2 | 9 3 | 8个 3 | 9

或者更好:

 A | B 
y | g
z | f
z | g

还是这是自讨苦吃?

最佳答案

从 A 和 B 之间的交叉连接开始,以获得所有可能的对。然后对关系表做左连接,选择没有匹配的地方:

select driver.aID, driver.bID
from (select a.id as aID, b.id as bID
from table_A A cross join table_B B
) driver left outer join
table_A_B ab
on ab.aID = driver.aID and ab.bID = bID
where ab.aID is null

这有效,假设 ID 永远不会为 NULL。

我还没有测试过 SQL,所以它可能有语法错误。

此版本为您提供名称:

select driver.aName, driver.bName
from (select a.id as aID, b.id as bID, a.name as aName, b.name as Bname
from table_A A cross join table_B B
) driver left outer join
table_A_B ab
on ab.aID = driver.aID and ab.bID = bID
where ab.aID is null

关于mysql - 在相关/查找表上选择不相关的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com