2010-12-11 83 views
0

我有我的数据库的表名为订单,它看起来像这样:MySQL - 如何加入未知索引?

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 

但问题是,在订单表中可以插入值0,这意味着 - 所有章节/价格/城市/公司,但是当我运行我的查询,只有值,他们的ID存在于另一个表中。

任何想法?谢谢。

回答

0

使用LEFT JOIN代替JOIN(这是INNER JOIN的简写)

+0

这是不正确的。一个左连接返回没有任何其他关联的订单。当有0 ID时,他希望**所有**都相关联。 – 2010-12-11 19:40:37

+0

你就是这么理解它的。我坚持我的回答。 – Mchl 2010-12-11 19:45:59

+0

“值为0,这意味着 - **所有**部分/价格/城市/公司”我明白这一点,他希望在ID_ 为0时匹配该类别中的所有内容。 – 2010-12-11 19:49:36

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。 (但这种情况并不是由你的问题引起的!我只是添加了它,因为人们似乎明白这一点)。

+0

这是不正确的。如问题所述,这些表中没有ID = 0的行。 :P – Mchl 2010-12-11 19:47:44

+0

@Mchl那么?你在哪里看到我检查'id = 0'?我只检查'ID_ '为0. – 2010-12-11 19:51:13

+0

是的。我写了ID而不是写全名来节省一些时间。 – Mchl 2010-12-11 19:52:35

0

LEFTRIGHT OUTER JOINs进行实验,你就可以找出你需要做的事情。基本上,LEFT或RIGHT OUTER JOIN会将NULLS插入没有数据存在但仍然进行连接的列。

在网上有various resources解释这一点。