0

我试图加入 5 个看起来有点像这样的表

发布表

身份证 | 产品 | 用户-我们| 制造ID | 经销商ID | 待定 | .... 30 其他列 ... |

做表

身份证 | 制作 |

状态表

前缀 | 状态 | 城市| 压缩

成员表

身份证 | 姓名 | 电子邮件 | 密码 | 拉链 | 经销商编号

经销商表

身份证 | 经销商名称 | 城市| 状态 | 拉链 | 地址 | 电话

MySql 查询看起来像这样

    SELECT *
    FROM `post` AS p
        JOIN (`make` AS m, `state` AS s, `members` AS mb, `dealer` AS d)
        ON (p.Make = m.id AND p.state = s.id AND p.id = mb.id AND mb.dealer-id = d.id)
   WHERE p.pending != '1'

问题是这个查询只返回member.dealer-id = Dealer.id 的行,如果我使用 LEFT JOIN,它返回所有正确的行,但表中的所有列 make、state、members 和 Dealer 都将为 NULL。这不应该是因为我需要这些表格中的信息。

dealer如果member.dealer-id > 0,我只能加入表格吗?我可以在 id 为 0 的经销商表中添加一行,但必须有更好的方法。

4

1 回答 1

2

以正常方式对联接进行编码后,LEFT JOIN仅在dealer表上使用:

SELECT *
FROM post AS p
JOIN make AS m ON p.Make = m.id
JOIN state AS s ON  p.state = s.id
JOIN`members AS mb ON p.id = mb.id
LEFT JOIN dealer AS d ON mb.dealer_id = d.id
WHERE p.pending != '1'

member.dealer-id如果大于零,这将自动加入经销商。

顺便说一句,我以前从未见过像你这样编码的查询连接。如果我有,我会假设它由于语法错误而不会执行 - 它看起来很奇怪。

于 2013-07-31T04:57:41.847 回答