【问题标题】:SELECT WITH LEFT JOIN AND WHERE CLAUSESELECT WITH LEFT JOIN 和 WHERE 子句
【发布时间】:2013-02-28 14:24:47
【问题描述】:

我有 2 个表:Users{username, UserID} AND Prizes{UserID, Prize, status}

我想选择所有用户(来自用户离开加入奖品),除了奖品表中“status = dead”的用户

【问题讨论】:

  • 你在使用mysql sql-server吗?
  • 为什么需要样本数据来回答这个问题?
  • @kekekela,我想你是对的。这只是对一个没有表现出努力的问题的不自觉反射......
  • 这样的问题无需表现出努力。 SO 有很多渴望代表的贡献者 ;-)
  • @mjv rep-hungry 贡献者 可能不是一个好词。你是说这样的问题不值得回答吗?只要我理解并能够支持,我会在这里回答所有问题。对我来说,我称之为charity——分享知识(期待或不期待回报)。 :)

标签: mysql sql sql-server database


【解决方案1】:

我认为您需要在这里是INNER JOIN,因为您只想搜索状态不等于dead 的用户。

SELECT  a.*, b.*
FROM    Users a
        INNER JOIN Prizes b
            ON a.userID = b.UserID
WHERE   b.status <> 'dead'

如需进一步了解联接,请访问以下链接:

更新 1

SELECT  a.*, b.*
FROM    Users a
        LEFT JOIN Prizes b
            ON a.userID = b.UserID
WHERE   b.UserID IS NULL OR b.status <> 'dead'

【讨论】:

  • 不 我要选择用户,即使他根本没有奖品记录。但是如果他确实有奖品,那么如果状态 死亡则应用条件 注意:状态死亡可能会让你感到困惑(它在奖品表中)意味着奖品可能已经死而不是用户! :P
  • @MahmoudZalt 更新后的答案怎么样?或在此处查看演示 sqlfiddle.com/#!2/8d582/1
  • 非常感谢您为回答所做的努力。
【解决方案2】:

试试这个;

select u.* 
from users as u 
left join prizes as p 
on u.userid = p.userid 
where p.status <>'dead';

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 2017-07-31
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    相关资源
    最近更新 更多