Mysql - 逆向 3 table - 查询
Mysql - Inverse 3 table-query
我有这个查询,它给了我一个公司列表 (tblprov) 及其相应的类别 (tblrubro)
两个 table 通过查找相关 table (tblprovxrubro)
SELECT p.id, p.name, r.idCat, r.rubroDesc FROM tblprov p
JOIN tblprovxrubro pr on p.id = pr.idFirm
JOIN tblrubros r on pr.idCat = r.idCat
WHERE p.id = 20
在这个例子中,我有一个公司与 2 个公司类别相关,所以查询会给我这个结果
id | razonSocial | idCat | catDesc |
20 | Firm 1 | 2 |Electronics |
20 | Firm 1 | 3 | Software |
如果我需要知道与该公司无关的相反类别怎么办?
想不通
您可以执行从类别 table 到交汇点 table 的 LEFT JOIN
。类别 table 将在最左边,因为您要考虑所有类别。所有在 pid = 20
的连接 table 中没有相应行的类别将是您需要的结果。我们使用 IS NULL
比较运算符来考虑这些行。
SELECT r.idCat, r.rubroDesc
FROM tblrubros r
LEFT JOIN tblprovxrubro pr
on pr.idCat = r.idCat AND
pr.idFirm = 20
WHERE pr.idCat IS NULL
我有这个查询,它给了我一个公司列表 (tblprov) 及其相应的类别 (tblrubro)
两个 table 通过查找相关 table (tblprovxrubro)
SELECT p.id, p.name, r.idCat, r.rubroDesc FROM tblprov p
JOIN tblprovxrubro pr on p.id = pr.idFirm
JOIN tblrubros r on pr.idCat = r.idCat
WHERE p.id = 20
在这个例子中,我有一个公司与 2 个公司类别相关,所以查询会给我这个结果
id | razonSocial | idCat | catDesc |
20 | Firm 1 | 2 |Electronics |
20 | Firm 1 | 3 | Software |
如果我需要知道与该公司无关的相反类别怎么办?
想不通
您可以执行从类别 table 到交汇点 table 的 LEFT JOIN
。类别 table 将在最左边,因为您要考虑所有类别。所有在 pid = 20
的连接 table 中没有相应行的类别将是您需要的结果。我们使用 IS NULL
比较运算符来考虑这些行。
SELECT r.idCat, r.rubroDesc
FROM tblrubros r
LEFT JOIN tblprovxrubro pr
on pr.idCat = r.idCat AND
pr.idFirm = 20
WHERE pr.idCat IS NULL