我试图加入5个看起来有点像这样的表
发布表格
ID |产品|用户 - 我们| make-id |经销商ID待定| ......其他30个栏目...... |
制作表格
ID |制作|
州表
前缀|州|城市|拉链
成员表
ID |名字|电子邮件|密码| zip |经销商-ID
经销商表
ID |经销商名称|城市|州| zip |地址|电话
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,则返回所有正确的行,但表中的所有列都是,州,会员和经销商将为NULL。它不应该是因为我需要那些表中的信息。
如果 member.dealer-id为>,我只能加入dealer
表格吗? 0 ?我可以在经销商表中添加一行ID为0,但必须有更好的方法。
答案 0 :(得分: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
大于零,这将自动加入经销商。
顺便说一下,我以前从未见过像你这样的查询连接编码。如果我有,我会认为它不会因语法错误而执行 - 看起来很奇怪。