我正在重写返回数据和相关属性数据的旧代码。
旧代码的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 = '?'
吗?