Mysql 使用Case(或其他方法)使用查询中的值更改查询的WHERE子句

Mysql 使用Case(或其他方法)使用查询中的值更改查询的WHERE子句,mysql,sql,Mysql,Sql,假设我们有4张桌子 TableA A_Id int ValA1 int ValA2 int ValA3 int TableB B_Id int ValB1 int ValB2 int ValB3 int TableC C_Id int A_Id int B_Id int D_Id int Type Varchar(1) TableD D_Id int ValD Varchar(50) 用户输入为$A、$B

假设我们有4张桌子

TableA
A_Id    int
ValA1   int
ValA2   int
ValA3   int

TableB
B_Id    int
ValB1   int
ValB2   int
ValB3   int 


TableC
C_Id    int
A_Id    int
B_Id    int
D_Id    int
Type    Varchar(1)


TableD
D_Id    int
ValD    Varchar(50)
用户输入为$A、$B和$D

我想要的是以下结构:

If (TableC.Type == 'A' AND  TableA.ValA1 == $A AND TableD.ValD == $D)
{
    Return TableA.ValA2, TableA.ValA3, TableD.ValD
}
Else If(TableC.Type == 'B' AND  TableB.ValB1 == $B AND TableD.ValD == $D)
{
    Return TableB.ValB2, TableB.ValB3, TableD.ValD
}
Else If((TableC.Type == 'C' OR TableC.Type == 'D') AND TableD.ValD == $D)
{
    Return TableA.ValA2, TableA.ValA3, TableB.ValB2, TableB.ValB3, TableD.ValD
}
这可能吗?如果是,正确的语法是什么

    SELECT TableA.ValA2 AS field1, TableA.ValA3 AS field2, TableD.ValD AS field3, NULL AS field4, NULL AS field5
    FROM (joined tableset)
    WHERE (TableC.Type == 'A' AND  TableA.ValA1 == $A AND TableD.ValD == $D)
UNION ALL
    SELECT TableB.ValB2, TableB.ValB3, TableD.ValD, NULL, NULL
    FROM (joined tableset)
    WHERE (TableC.Type == 'B' AND  TableB.ValB1 == $B AND TableD.ValD == $D)
UNION ALL
    SELECT TableA.ValA2, TableA.ValA3, TableB.ValB2, TableB.ValB3, TableD.ValD
    FROM (joined tableset)
    WHERE ((TableC.Type == 'C' OR TableC.Type == 'D') AND TableD.ValD == $D)

通常情况下,在满足该条件的情况下,此处的条件必须没有交叉潜力。如果不是,则每个下一个条件必须伴随而不是之前的条件。

类型未知,只有通过表D和C之间的连接,类型值才能恢复并准备使用。所以这只有在我把它分成两个单独的动作时才有可能。你不能用。我不确定您从何处获得提供完整查询的类型。@panoskarajohn我实际上尝试过,因此标题中提到了Case,但我无法获得正确的语法。您能提供该查询吗?也许我们可以更正它。看到给出了正确的答案,并且查询本身没有进行任何操作,我没有保存它。但它涉及到使用子查询获取table.Type值,并使用该值在SELECT和中创建一系列案例,其中使用实际数据时,查询会变得有点臃肿,但确实有效。唯一需要注意的是在联接中,您需要在Select A中排除表B,选择B中的表A,并将它们作为最后的左联接。@A.bakker唯一需要注意的是,在联接中,您可以自由构建最佳查询,以获得每个单独条件的结果集,包括联接表列表中的差异。唯一需要匹配的是数据量和数据类型兼容,并且可以转换为第一个字段。MySQL非常忠实于数据类型的差异——似乎唯一可能导致查询失败的问题是排序强制问题。