gpt4 book ai didi

mysql - MySQL 中的条件表选择

转载 作者:行者123 更新时间:2023-11-29 06:44:27 25 4
gpt4 key购买 nike

我正在尝试同时访问不同表中的数据,但我希望能够根据另一个表中列的值来确定从哪些表中提取数据。

这是一个例子:

表A:(id,table1_id,table1_type,table2_id,table2_type)

  • (1, 1, 'B_Type', 2, 'E_Type')
  • (2, 2, 'B_Type', 3, 'D_Type')
  • (3, 1, 'C_Type', 2, 'B_Type')

表 B:(id,some_values):

  • (1, '某事')
  • (2, '其他')

表 C、D 和 E 看起来与 B 有点相似。

所以,我想执行以下操作(在伪 javascript 中完成):

result = db.Query("SELECT * from A WHERE [condition] LIMIT 1")
table1 = getTable(result.table1_type) // E.g. 'B' if 'B_Type'
table2 = getTable(result.table2_type)
new_results = db.Query("SELECT * from " + table1 + ", " + table2 + " WHERE [condition]")

这种方法可行,但我希望可能有一种方法可以根据 A 的 table_type 列有条件地选择表。

如有任何帮助,我们将不胜感激。

最佳答案

如果你真的想这样做,你需要所有多连接中最丑陋的:

SELECT
IF(A.table1_type='B',B1.some_value,
IF(A.table1_type='C',C1.some_value,
IF(A.table1_type='D',D1.some_value,
IF(A.table1_type='E',E1.some_value,
NULL)))) AS table1_value,
IF(A.table2_type='B',B2.some_value,
IF(A.table2_type='C',C2.some_value,
IF(A.table2_type='D',D2.some_value,
IF(A.table2_type='E',E2.some_value,
NULL)))) AS table2_value
FROM A
LEFT JOIN B AS B1 ON A.table1_type='B' AND A.table1_id=B1.id
LEFT JOIN C AS C1 ON A.table1_type='C' AND A.table1_id=C1.id
LEFT JOIN D AS D1 ON A.table1_type='D' AND A.table1_id=D1.id
LEFT JOIN E AS E1 ON A.table1_type='E' AND A.table1_id=E1.id
LEFT JOIN B AS B2 ON A.table2_type='A' AND A.table2_id=B2.id
LEFT JOIN C AS C2 ON A.table2_type='B' AND A.table2_id=C2.id
LEFT JOIN D AS D2 ON A.table2_type='C' AND A.table2_id=D2.id
LEFT JOIN E AS E2 ON A.table2_type='D' AND A.table2_id=E2.id
WHERE [condition for A];

编辑

一些解释的话:MySQL(和大多数 SQL 数据库一样)没有“预期的”方式在表之间动态切换。这使得有必要连接所有 表,然后删除除一个结果之外的所有结果。为您的用例重复两次。

关于mysql - MySQL 中的条件表选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19553112/

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