2012-12-13 178 views
5

我在PHP MySQL的 产品,product_fact三个表,其实 架构是这样选择多个值SQL从另一个查询

产品

id , name (1000 records) 

EG-

id  | name 
-------+-------- 
1125 | key chain 
1135 | bikes 
1145 | cars 

id =有每个产品都有一个唯一的ID产品的不同ID号,

=产品名称

product_fact

product_id, fact_id 

PRODUCT_ID =这是一样的id即产品表

fact_id =这是事实ID每个产品都有一些事实,许多产品有不止一个事实。

EG-

product_id | fact_id 
------------+---------- 
1125  |  5 
1125  |  7 
1125  |  6 
1135  |  8 
1145  |  9 
1145  |  2 

事实

id , name 

ID =此被fact_id相同表product_fact

名称 =这是事实的名称。

EG-

id  | name 
--------+--------- 
2  | black 
8  | free 
5  | sold 
6  | coming soon 
9  | new 

现在我要选择与产品相关的特定事实的名字,但是当我执行这个查询 - >

SELECT name 
FROM fact 
Where id = (SELECT fact_id 
FROM product_fact 
Where product_id='1125'); 

它说子查询返回多个1行

但是,当我运行此查询 - >

SELECT name 
FROM fact 
Where id = (SELECT fact_id 
FROM product_fact 
Where product_id='1135'); 

它给了我正确的输出:免费

我应该怎么做,现在应该显示其实名的其他产品的任何帮助, 我应该有什么其他的我的查询,包括..任何帮助

回答

14

要与子查询更安全,使用JOIN

SELECT DISTINCT a.name 
FROM fact a 
     INNER JOIN product_fact b 
      ON a.ID = b.fact_ID 
WHERE b.product_ID = '1125' 
+0

及其与工作.. THX的人使用IN代替=

SELECT name FROM fact Where id IN (SELECT fact_id FROM product_fact WHERE product_id='1125'); 

或 – iOSBee