我的数据库中有一个名为ORDERS的表,它看起来像这样:
ID_section(int),ID_price(int),ID_city(int),ID_company(int)
我想使用JOIN方法将名称设置为ID。
我要做的是:
SELECT * FROM ORDERS
JOIN sections ON sections.id=orders.ID_section
JOIN prices ON prices.id=orders.ID_price
JOIN cities on cities.id=orders.ID_cities
JOIN companies ON companies.id=orders.ID_company
但重点是,在ORDERS表中可以插入值0并且它意味着 - 所有部分/价格/城市/公司,但是当我运行我的查询时,只有值,即他们的ID存在于另一个中桌子出现了。
有什么想法吗?感谢。
答案 0 :(得分:1)
如果我理解你的问题是正确的,例如,ID_section = 0
表示订单属于所有部分,则以下查询应该可以解决问题。
SELECT * FROM ORDERS
JOIN sections ON sections.id=orders.ID_section OR orders.ID_section = 0
JOIN prices ON prices.id=orders.ID_price OR orders.ID_price = 0
JOIN cities on cities.id=orders.ID_cities OR orders.ID_cities = 0
JOIN companies ON companies.id=orders.ID_company OR orders.ID_company = 0
另一方面,如果您想要检索所有订单,无论它们是否有关联的部分,价格等,那么将LEFT JOIN
放在JOIN
的位置就足够了。 (但这种情况不是由你的问题引起的!我只是添加了它,因为人们似乎明白这一点。)
答案 1 :(得分:0)
使用LEFT JOIN
代替JOIN
(这是INNER JOIN
的简写)
答案 2 :(得分:0)
尝试LEFT
和RIGHT OUTER JOIN
,您将能够找出您需要做的事情。基本上,LEFT或RIGHT OUTER JOIN会将NULLS插入到没有数据但仍然进行连接的列中。
网上有various resources可以解释这一点。