gpt4 book ai didi

sql - 查询以使用 3 个表返回可能的行

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

我有A、B、C三个表,如下:

表A

  • ID(整数)[PK]
  • KeyFromTableA (varchar)

表B

  • ID(整数)[PK]
  • 姓名(可变字符)

表C

  • 表_A_ID(整数)[PK][FK]
  • 表_B_ID(整数)[PK][FK]
  • ValueFromTableC (int)
  • AnotherValueFromTableC (int)

我想构建一个查询,通过查询特定的表 B ID,返回表 A 的所有可能的 ID:

  • 如果至少有一行有表A ID以及查询到的Table B ID , 我想执行操作 ValueFromTableC - AnotherValueFromTableC .如果此操作为正则当前表A ID有效且应由查询返回,
  • 如果且仅当表 A ID表B ID在一行中找不到,我想检查表 A 的 KeyFromTableA .如果该列为真,则该表 A ID 也是有效的,应该由查询返回。

例子

表A

ID  |   KeyFromTableA
01 | false
02 | true
03 | false
04 | false
05 | true

表B

ID | Name
1 | A
2 | B
3 | C

表 C

Table_A_ID | Table_B_ID | ValueFromTableC | AnotherValueFromTableC
1 | 1 | 5 | 3
1 | 2 | 3 | 6
2 | 2 | 4 | 5
3 | 1 | 0 | 1

如果我通过 Table_B_ID 查询= 1 那么 Table_A_ID应该返回 1、2 和 5,因为(所有排序和命名都与表 C 相关):

  • 第一行匹配 Table_B_ID = 1,所以匹配。我执行操作 5 - 3,结果是肯定的。所以Table_A_ID = 1 有效。
  • 没有 Table_B_ID = 1 与 Table_A_ID 相关= 2,但因为在 Table A 中,带有 ID 的行= 2 有 KeyFromTableA具有 true 值,Table_A_ID = 2 也是有效的。
  • 有一个Table_A_ID = 3 与 Table_B_ID 相关= 1,但在对 0 - 1 执行正向检查时失败。因此不得返回。
  • 表C中没有引用表A的数据ID = 4. 但仍然必须执行第二个条件,并且失败,因为 KeyFromTableA是假的。所以不应该返回。
  • 最后表A也没有数据ID = 5. 第二个条件也适用并且通过,因为 KeyFromTableA是真的。所以5也应该包含在查询结果中。

我有这个查询,但我不明白为什么它不起作用。

SELECT DISTINCT a.id FROM b, a
LEFT JOIN c ON a.id = c.table_a_id
WHERE b.id = c.table_b_id
AND ((c.id IS NOT NULL AND c.value_from_table_c >
c.another_value_from_table_c)
OR (c.id IS NULL AND a.key_from_table_a))
AND b.id = 1;

最佳答案

我认为一个简单的 UNION 就足够了。

SELECT id_a
FROM table_c
WHERE id_b = 1
AND col_c_1 - col_c_2 > 0
UNION
SELECT table_a.id
FROM table_a
LEFT OUTER JOIN table_c ON (table_a.id = table_c.id_a AND table_c.id_b = 1)
WHERE table_c.id_a IS NULL AND table_a.key_a = 'true'

关于sql - 查询以使用 3 个表返回可能的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48549373/

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