MySQL加入两个表并返回多行

时间:2017-09-05 11:34:15

标签: mysql sql

我有两张桌子。 'First'表包含2个'second'表格。 v2和v3是第二个表的ID。

第一

`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它没有返回。

是否有任何方法可以将两个表联合起来以实现如下输出.. ??

`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'

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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'

答案 2 :(得分: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

:)