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];