【问题标题】:SELECT with condition on second table在第二个表上选择条件
【发布时间】:2012-07-13 06:15:02
【问题描述】:

我正在尝试使用运行良好的 JOIN 从 3 个表中选择记录,但我现在需要向 SELECT 添加一些我无法弄清楚的附加条件。我当前的选择是这样的:

SELECT user.*, address.*, state.* FROM user 
LEFT JOIN address ON user.id = address.user_id 
LEFT JOIN state ON user.id = state.user_id

现在,地址和状态可能有多个记录,但两个表都有一个位字段来指示它们是主记录,这是我要选择的记录。我尝试在语句中添加WHERE address.state = b'1',但它只返回那些具有主记录的记录,我最理想的做法是从按主字段排序的地址/状态表中选择顶部记录,以便主将如果存在则选择,但如果没有主记录将选择下一条记录。

如何使用 MySQL 5 实现这一点?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    将条件添加到您的LEFT JOIN

    LEFT JOIN address ON ( user.id = address.user_id AND address.state = b'1' )
    

    左连接只会返回符合此条件的行,但您仍然会得到users,但没有主地址。

    【讨论】:

    • 太好了,谢谢!这是朝着正确方向迈出的一步。有没有办法订购 JOIN 的结果而不是使用 WHERE 子句?因此,如果用户有一个主要地址,总是选择那个,但如果不是只选择下一个主要地址?
    • @JWood 是的 - 见这里:stackoverflow.com/questions/10999913/…
    • 除非我理解错了,并且你要求选择排名最高的匹配,在这种情况下你需要编写一个子查询。您应该将其作为一个新问题提出。
    • 我认为在这种情况下我确实需要一个子查询,因为 ORDER 仅适用于主表。我再问一个问题。谢谢
    猜你喜欢
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2013-08-20
    相关资源
    最近更新 更多