2012-12-13 216 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