MySQL if语句在左连接

时间:2017-01-18 11:07:48

标签: mysql database join

我正在重写返回数据和相关属性数据的旧代码。

旧代码的psudo逻辑:

SELECT * FROM Table;
foreach records 
    if record.col1 == '1'
        SELECT * FROM Table1;
        SELECT * FROM Table2;
    elsif record.col1 == 'A'
        SELECT * FROM TableA;
        SELECT * FROM TableB;

在下面的例子中(原来我的原始E.R.D),Table与Table1和& 1之间存在一对一的关系。表A,单独。

表1与表2具有一对多的关系。

TableA与TableB有一对多的关系。

[表] --- [表1] - < [表2]

[表] --- [表A] - < [表B]

我正在编写一个返回Table的所有行的过程,以及其关系中的其他数据(如果可用)。

我设法使用LEFT JOIN

实现了第一个示例关系
SELECT Table.col1, Table.col2, Table1.*, Table2.*
FROM Table
LEFT JOIN Table1
  ON Table1.col3 = Table.col3
  AND Table1.col4 = Table.col4
  AND Table1.col1 = Table.col5
LEFT JOIN Table2
  ON Table1.col1 = Table2.col6

我现在坚持的是如何使用某种类型的JOIN来表达IF样式。我已经使用LEFT JOIN作为我希望表中的所有行,并且只匹配Table1&的行。表2。 在我的脑海中,我有类似的东西

SELECT Table.col1, Table.col2, Table1.*, Table2.*
    FROM Table
    IF Table.col1 = '1'
      LEFT JOIN Table1
        ON Table1.col3 = Table.col3
        AND Table1.col4 = Table.col4
        AND Table1.col1 = Table.col5
      LEFT JOIN Table2
       ON Table1.col1 = Table2.col6
    ELSE Table.col1 = 'A'
       LEFT JOIN TableA
        ON TableA.col3 = Table.col3
        AND TableA.col4 = Table.col4
        AND TableA.col1 = Table.col5
      LEFT JOIN Table2
       ON TableA.col1 = TableB.col6

以上内容无效,但这是我目前的心态。我可以使用UNION,并在联盟的每一侧包含WHERE Table.col1 = '?'吗?

0 个答案:

没有答案