gpt4 book ai didi

mysql - SQL 查询 : Joining two tables where entity of the first table has no, 或其他表中的多个条目

转载 作者:行者123 更新时间:2023-12-01 00:14:59 26 4
gpt4 key购买 nike

我必须使用数据库表,其中第一个表的实体在第二个表中可能有也可能没有关联条目:

Table 1          Table 2       
+-----+-----+ +-----+-------+-------+
| ID | ... | | ID | T1_ID | NAME |
+-----+-----+ +-----+-------+-------+
| 1 | ... | | 1 | 1 | p1 |
| 2 | ... | | 2 | 1 | p2 |
| 3 | ... | | 3 | 2 | p1 |
| 4 | ... | +-----+-------+-------+
+-----+-----+

我需要运行以下查询:

  1. 使用 Table_2 的特定条目获取 Table_1 的所有实体 - 这很简单,一个简单的 Join 就可以...

  2. 获取 Table_1 的所有实体,这些实体没有关联 Table_2 的特定条目 - 不是那么容易,但我也设法通过连接查询了它。

  3. 获取 Table_1 的所有实体,这些实体具有特定的条目 (A) 并且没有关联另一个特定的条目 (B),即获取 Table_1 的所有实体,这些实体具有 Table_2 的实体,name=p1 并且没有关联 name=p2 的 Table_2 实体。

是否可以在没有子查询的情况下在单个 sql 语句中完成(3)中的那种查询?

最佳答案

Get all entities of Table_1, which have a specific entry (A) and don't have another specific entry (B) associated, i.e. get all entities of Table_1 that have an entity of Table_2 with name=p1 and don't have an entity of Table_2 with name=p2 associated.

我有点难以理解您的标准,但我认为这就是您想要的:

SELECT * 
FROM Table1 t1
JOIN Table2 t2 ON t1.ID = t2.t1_id
WHERE t2.name = 'p1'
AND NOT EXISTS(SELECT 'x' FROM Table2 t2_2 WHERE t1.ID = t2_2.t1_id AND t2_2.name = 'p2')

这将为您提供表 1 中在表 2 中具有名称 = 'p1' 的匹配记录并且在表 2 中没有名称 = 'p2' 的匹配记录的所有内容。这是你需要的吗?

再次编辑:

我想到了一种更聪明的方法来执行此操作,该方法涉及静态(非相关)子查询。该子查询只会执行一次,而不是对 Table1 中的每个父行都执行一次。我没有将这段代码通过查询分析器,但它应该比使用 EXISTS(...) 的查询快得多

SELECT * 
FROM Table1 t1
JOIN Table2 t2 ON t1.ID = t2.t1_id
WHERE t2.name = 'p1'
AND t1.id NOT IN(SELECT t1_id FROM Table2 WHERE name = 'p2')

关于mysql - SQL 查询 : Joining two tables where entity of the first table has no, 或其他表中的多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6305800/

26 4 0