SQL - 条件加入

SQL - Conditional Join

我想对一些数据进行 SQL 连接。简而言之,我有一个 table(例如 items_tbl),用户可以在其中提交项目供其他用户竞标,例如

itemUID, Details, Price, usernameOfSeller

在另一个 table(例如 bid_tbl)中,我收集出价

itemUID, usernameOfSeller, usernameofBuyer, offerPrice

我想做的是向买家展示他们没有出价的每件商品。程序上它将是:

SELECT itemUID FROM bid_tbl WHERE usernameofBuyer = 'John'; //All the itemUID's John has bid on

并且使用这个数据集,select 他没有从另一个 table 出价的所有项目:

SELECT itemUID FROM items_db WHERE itemUID <> [data from bid_tbl above]

我以前做过 'joining' 但从来没有有条件地这样做过。谢谢!

基础数据概览

样本items_tbl

1,Xbox,Sean,100
2,PS4,Mark,300
3,Xbox,Mark_b,500

样本bid_tbl

/* John has bid on UID 1 and 2 */

1, Sean, John, 100
2, Mark, John, 200

结果集:

/* John has not bid on itemUID 3 */

3

一种方法是使用带有 NOT IN 子句的子查询,以排除出价的项目:

SELECT itemUID FROM items_db 
WHERE itemUID NOT IN 
    (SELECT itemUID FROM bid_tbl WHERE usernameofBuyer = 'John')

另一种方法是用户 LEFT JOIN 并过滤掉实际离开的项目:

SELECT i.itemUID 
FROM items_db i LEFT JOIN bid_tbl b ON i.itemUID = b.itemUID AND b.usernameofBuyer = 'John'
WHERE b.itemUID IS NULL