此查询不起作用。我希望LEFT JOIN
的所有结果都是某些东西。这是我的确切代码:
SELECT * FROM `swarovski_zones` WHERE `siteid`='200'
LEFT JOIN `trafficviews` ON `swarovski`.`id`=`trafficviews`.`adid`
swarovski_zones
表格为 siteid 200
trafficviews
表格为 adid 200
200是表之间的链接变量。我想要ID为200的两个表格中的所有内容。
答案 0 :(得分:7)
查询不起作用,因为语法不正确。它应该是:
select
from
join
on
where
group by
having
order by
limit
给你:
select *
from `swarovski_zones`
left join `trafficviews`
on `swarovski`.`id` = `trafficviews`.`adid`
where `siteid` = '200'
同样,siteid
是一个字符串而不是一个整数?
我可能会后悔提供上面的清单......
Limit
!我忘了Limit
;完整语法列表为here
答案 1 :(得分:1)
用户完全外部加入
SELECT * FROM `swarovski_zones` WHERE `siteid`='200'
FULL OUTER JOIN `trafficviews` ON `swarovski`.`id`=`trafficviews`.`adid`
答案 2 :(得分:1)
这里的问题是右表中的元素(trafficviews)可能在左表(swarovski_zones)中没有对应的行。因此,左连接将从左侧获取所有元素,并可能从右侧省略一些元素。
要解决此问题,您需要一个外部联接。你的问题是MySQL不支持外连接:)这可以通过以下一般方式解决:
SELECT * FROM a LEFT JOIN b ON a.id = b.id
UNION ALL
SELECT * FROM a RIGHT JOIN b ON a.id = b.id WHERE a.id IS NULL;
应用于您的问题,应该是这样的:
SELECT * FROM swarovski_zones s
LEFT JOIN trafficviews ON s.id = t.adid
UNION ALL
SELECT * FROM swarovski_zones s
RIGHT JOIN trafficviews ON s.id = t.adid WHERE s.id IS NULL
WHERE s.siteid = 200 or t.adid = 200
试一试。