简体   繁体   中英

MySQL JOIN two tables and return multiple rows

I have two tables. 'First' table contains 2 ids of 'second' table. v2 and v3 are second table's IDs.

First :

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

Second :

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

When I'm joining,

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 it return none.

Is any way to union both tables to achieve output as following..??

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

For fetching 2 id of first table.

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

It should return as, seems v3_amt is empty.

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

You should use 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'

you can use left join and OR for this case

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'

You should empty the v3 column on insert if v3_amt="" similarly on v2 and try this query

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

:)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM