id IN(其他 id 的列表)取决于 IF
id IN (list of other ids) depending on IFs
我有一个简单的加入,例如:
SELECT field.table1, field.table2
LEFT JOIN table2 ON table2.table1 = table1.id
FROM table1
WHERE table1.id = [changing id];
其中table1.id是自增索引,table2.table1是table1到table2的1:n键
现在我需要做类似的事情:
SELECT field.table1, field.table2
LEFT JOIN table2 ON
[ IF table1.id = 1 THEN table2.table1 IN (10, 11, 12)
IF table1.id = 2 THEN table2.table1 IN (13, 14)
IF table1.id = 3 THEN table2.table1 IN (15)
IF table1.id = 4 THEN table2.table1 IN (16, 17, 18)]
FROM table1
WHERE table1.id = [changing id];
这样做的正确语法是什么?
请记住,这只是一个例子。我需要这样做是有原因的(内涵 1 => 10,11,12, 2 => 13,14 等等不是来自数据库/空洞查询是动态输入到我的另一个系统中的不能改变,查询完成的地方,所以我现在不知道id)。
语法应该是一系列逻辑(AND\OR)子句:
SELECT field.table1, field.table2
LEFT JOIN table2 ON
(table1.id = 1 AND table2.table1 IN (10, 11, 12) )
OR (table1.id = 2 AND table2.table1 IN (13, 14) )
OR (table1.id = 3 AND table2.table1 IN (15) )
FROM table1
WHERE table1.id = [changing id];
我要做的是创建一个映射 table,就像这样(我们将其称为 table3
):
Table1ID
Table2ID
1
10
1
11
1
12
2
13
2
14
3
15
4
16
4
17
4
18
然后为连接添加另一个级别:
SELECT field.table1, field.table2
FROM table1
LEFT JOIN table3 ON table3.Table1ID = table1.id
LEFT JOIN table2 ON table2.id = table3.table2ID
WHERE table1.id = [changing id];
我有一个简单的加入,例如:
SELECT field.table1, field.table2
LEFT JOIN table2 ON table2.table1 = table1.id
FROM table1
WHERE table1.id = [changing id];
其中table1.id是自增索引,table2.table1是table1到table2的1:n键
现在我需要做类似的事情:
SELECT field.table1, field.table2
LEFT JOIN table2 ON
[ IF table1.id = 1 THEN table2.table1 IN (10, 11, 12)
IF table1.id = 2 THEN table2.table1 IN (13, 14)
IF table1.id = 3 THEN table2.table1 IN (15)
IF table1.id = 4 THEN table2.table1 IN (16, 17, 18)]
FROM table1
WHERE table1.id = [changing id];
这样做的正确语法是什么?
请记住,这只是一个例子。我需要这样做是有原因的(内涵 1 => 10,11,12, 2 => 13,14 等等不是来自数据库/空洞查询是动态输入到我的另一个系统中的不能改变,查询完成的地方,所以我现在不知道id)。
语法应该是一系列逻辑(AND\OR)子句:
SELECT field.table1, field.table2
LEFT JOIN table2 ON
(table1.id = 1 AND table2.table1 IN (10, 11, 12) )
OR (table1.id = 2 AND table2.table1 IN (13, 14) )
OR (table1.id = 3 AND table2.table1 IN (15) )
FROM table1
WHERE table1.id = [changing id];
我要做的是创建一个映射 table,就像这样(我们将其称为 table3
):
Table1ID | Table2ID |
---|---|
1 | 10 |
1 | 11 |
1 | 12 |
2 | 13 |
2 | 14 |
3 | 15 |
4 | 16 |
4 | 17 |
4 | 18 |
然后为连接添加另一个级别:
SELECT field.table1, field.table2
FROM table1
LEFT JOIN table3 ON table3.Table1ID = table1.id
LEFT JOIN table2 ON table2.id = table3.table2ID
WHERE table1.id = [changing id];