2017-09-05 37 views
-1

我有兩個表。 '第一'表包含2個'第二'表的ID。 v2和v3是第二個表的ID。MySQL連接兩個表並返回多行

首先

`id`, `mem`, `v2`, `v3`, `v2_amt`, `v3_amt` 
    1, 'test', 1,  2, '10',  '20' 
    2, 'test2', 1,  2, '10',  '' 

`id`, `name` 
    1, 'anna' 
    2, 'teena' 

當我加盟,

SELECT  f.mem, s.name 

FROM  `first` f 

JOIN  second s 
    ON  f.v2 = s.id 
    AND  f.v2_amt !="" 
    AND  (f.v3 = s.id AND f.v3_amt !='') 

WHERE  f.id = '1' 

GROUP BY s.id 
  • Currenlty它[R沒有。

什麼辦法工會兩個表來實現輸出如下..?

`mem`, `name` 
    test, 'anna' 
    test, 'teena' 

用於獲取第一個表的2個ID。

SELECT  f.mem, s.name 

FROM  `first` f 

JOIN  second s 
    ON  f.v2 = s.id 
    AND  f.v2_amt !="" 
    AND  (f.v3 = s.id AND f.v3_amt !='') 

WHERE  f.id = '2' 

GROUP BY s.id 

它應該返回爲,似乎v3_amt是空的。

`mem`, `name` 
    test, 'anna' 
+0

這是第二個表V2或V3 –

+0

的唯一ID兩者都是唯一的ID –

+0

你想要的結果是測試,'teena'或test2,'teena'? –

回答

1

如果v3_amt =你應該清空上插入的V3列 「」 同樣在v2和嘗試此查詢

Select f.v2,f.v3,f.v2_amt,f.v3_amt,s.name from first as f join second as s on 
(f.v2 = s.id OR f.v3 = s.id) and (f.v2_amt!="" OR f.v3_amt!="") where f.id=2 

:)

1

您應該使用OR

SELECT f.mem, s.name FROM `first` f JOIN `second` s 
ON f.v2 = s.id AND f.v2_amt !="" OR (f.v3 = s.id AND f.v3_amt !='') 
WHERE f.id = '1' 
+0

好的。它的工作原理,但只適用於第一個表的1個ID。 SELECT f.mem,s.name FROM'first'˚FJOIN'秒'小號 ON f.v2 = s.id AND f.v2_amt!= 「」 OR(f.v3 = s.id和f.v3_amt! = '') WHERE f.id = '2' GROUP BY s.id 爲2同上,它應該返回爲 'test2的', '安娜'。 但它什麼也沒有返回。 –

+0

answert更新,刪除組。 – GuangshengZuo

1

可以使用left joinOR這種情況下

select ft.mem, st.name from first_table ft 
LEFT JOIN second_table st ON (ft.v2 = st.id AND ft.v2_amt !="") OR (ft.v3 = st.id AND ft.v3_amt !="") 
WHERE ft.id = '1' 
+0

好的。問題已更新。但是,如果f.id ='2'。它的回報沒有任何。 –