多连接一对多

时间:2015-04-16 14:39:39

标签: mysql

交易

id |Trade_name |
1  |  trade1   |
2  |  trade2   |
3  |  trade3   |
4  |  trade4   |

用户

Name |  Primary_id(FK to trade.id)  |  secondary_id (FK to trade.id)  |
John |            1                 |              2                  |
Alex |            3                 |              4                  |

这是我当前的SQL,它将trades.t1加入primary& secondary.id:

select 
`users`.`name` , 
`t1`.`trade_name` AS `Primary_trade`,
`t2`.`trade_name` AS `Secondary_trade`,
FROM `users`
right JOIN `trades` `t1` On (`t1`.`trade_id` = `users`.`primary_trade_id`) 
right JOIN `trades` `t2` on (`t2`.`trade_id` = `users`.`secondary_trade_id`) 

我的问题是,如何确定哪些交易未用作主要或次要用户。我想看一下主要或次要栏目中不存在交易的记录,以便我可以进行内务管理。

提前感谢你们的帮助。

2 个答案:

答案 0 :(得分:1)

如果您只需要交易行

SELECT t.*
FROM trades t
WHERE NOT EXISTS (  SELECT 'u'
                    FROM Users u
                    WHERE u.Primary_id = t.id
                    OR u.Secondary_id = t.id
                )

答案 1 :(得分:0)

我认为这应该适合你:

SELECT * FROM trades WHERE id NOT IN (SELECT Primary_id FROM Users) AND id NOT IN (SELECT Secondary_id FROM Users)

它选择不在primary_id和secondary_id

中的行