2017-09-05 122 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'。它的回报没有任何。 –