SQL 查询帮助条件连接
SQL Query Help Conditional Join
假设我有三个表:
组Table
OGID
OGC
OGCD
56
300
TAS
81
TA
CAL
结构Table
OSID
L1D
L2D
44
56
81
合同
ContractID
44
我提供了 ContractID,我想创建一个 Table 具有以下内容:
ContractID
Structure L1D
Structure L2D
Group OGID
Group OGC
Group OGCD
Group OGID
Group OGC
Group OGCD
44
56
81
56
300
TAS
81
TA
CAL
在 SQL 中解决此问题的最佳方法是什么?
还有一个问题是 L2D 可以为空,每当我尝试使用 INNER JOIN 语句来连接表时,NULL 语句都会被忽略。
SELECT
Contract.ContractID, Structure.L1D, Structure L2D, Group.OGID, Group.OGC, Group.OGID, Group2.OGID, Group2.OGC, Group2.OGID,
FROM
(
SELECT Structure.OSID, Structure.L1d, Group.OGID, Group.OGC, Group.OGCD
FROM Structure
INNER JOIN Group
ON (Structure.L1D = Group.OGID)
) T1
INNER JOIN
(
SELECT Structure.OSID, Structure.L1D, Group2.OGID, Group2.OGC, Group2.OGCD
FROM Structure
INNER JOIN Group2
ON (Structure.L2D = Group2.OGID)
) T2
ON (T1.OSID = T2.OSID OR T2.OSID = NULL)
SELECT
s.OSID,
s.L1D,
s.L2D,
g1.OGID,
g1.OGC,
g1.OGCSD,
g2.OGID,
g2.OGC,
g2.OGCSD
FROM structure s
LEFT JOIN `group` g1 ON g1.OGID = s.L1D
LEFT JOIN `group` g2 ON g2.OGID = s.L2D
DBFIDDLE 还显示了当 L2D
的值为 NULL
时发生的情况。
P.S。通常你不应该使用,或者至少尽量避免,Reserved Words 作为 table 名字,比如 GROUP
.
假设我有三个表:
组Table
OGID | OGC | OGCD |
---|---|---|
56 | 300 | TAS |
81 | TA | CAL |
结构Table
OSID | L1D | L2D |
---|---|---|
44 | 56 | 81 |
合同
ContractID |
---|
44 |
我提供了 ContractID,我想创建一个 Table 具有以下内容:
ContractID | Structure L1D | Structure L2D | Group OGID | Group OGC | Group OGCD | Group OGID | Group OGC | Group OGCD |
---|---|---|---|---|---|---|---|---|
44 | 56 | 81 | 56 | 300 | TAS | 81 | TA | CAL |
在 SQL 中解决此问题的最佳方法是什么? 还有一个问题是 L2D 可以为空,每当我尝试使用 INNER JOIN 语句来连接表时,NULL 语句都会被忽略。
SELECT
Contract.ContractID, Structure.L1D, Structure L2D, Group.OGID, Group.OGC, Group.OGID, Group2.OGID, Group2.OGC, Group2.OGID,
FROM
(
SELECT Structure.OSID, Structure.L1d, Group.OGID, Group.OGC, Group.OGCD
FROM Structure
INNER JOIN Group
ON (Structure.L1D = Group.OGID)
) T1
INNER JOIN
(
SELECT Structure.OSID, Structure.L1D, Group2.OGID, Group2.OGC, Group2.OGCD
FROM Structure
INNER JOIN Group2
ON (Structure.L2D = Group2.OGID)
) T2
ON (T1.OSID = T2.OSID OR T2.OSID = NULL)
SELECT
s.OSID,
s.L1D,
s.L2D,
g1.OGID,
g1.OGC,
g1.OGCSD,
g2.OGID,
g2.OGC,
g2.OGCSD
FROM structure s
LEFT JOIN `group` g1 ON g1.OGID = s.L1D
LEFT JOIN `group` g2 ON g2.OGID = s.L2D
DBFIDDLE 还显示了当 L2D
的值为 NULL
时发生的情况。
P.S。通常你不应该使用,或者至少尽量避免,Reserved Words 作为 table 名字,比如 GROUP
.