【问题标题】:MySQL join with LIMIT 1 from two tablesMySQL 从两个表中加入 LIMIT 1
【发布时间】:2009-12-03 10:25:16
【问题描述】:

我有两张桌子。一个包含有关属性的信息。另一个为每个属性存储 3 个图像。在这三张图片中,一张被标记为“主要”图片。

所以我有:

Properties:
p_id    name
1   villa a
2   villa b
3   villa c
4   villa d

    Images
i_id p_id main
1    1     0
2    1     0
3    1     1
4    2     0
5    2     1
6    2     0

我需要生成一个查询,该查询返回所有属性及其主图像的 id。例如

p_id  name    i_id
1     villa a  3
2     villa b  5

我知道这将涉及使用 LIMIT 1 和连接,但不确定从哪里开始,我已经尝试通过使用子查询来执行此操作,但觉得它一定比我所做的要简单......

* 我该怎么做 * 让它通过“main”选择前 1 个来排序查询(即,如果没有设置 main,它仍然会选择一个图像)?

【问题讨论】:

    标签: mysql join limit


    【解决方案1】:

    这是一种方法:

    select      *
    from        properties p
    left join   images i 
    on          p.p_id = i.p_id 
    and         i.main = 1
    

    如果没有找到主图像,左连接将返回一个 NULL 图像。

    【讨论】:

    • 虽然可能不是必需的输出:“我需要生成一个查询,该查询返回所有属性及其主图像的 id。” ..无论如何,谁想买没有照片的房子;-p
    【解决方案2】:

    给你:

    SELECT p_id, name, i_id
    FROM properties p INNER JOIN images i ON (p.p_id = i.p_id AND i.main = 1)
    

    SELECT p_id, name, i_id
    FROM properties p INNER JOIN images i ON (p.p_id = i.p_id)
    WHERE i.main = 1
    

    【讨论】:

    • 啊 - 这仅提供一个属性,而不是所有属性。
    【解决方案3】:
    SELECT p.p_id, p.name i.i_id FROM properties p JOIN images i USING p_id where p_id = 1;
    

    【讨论】:

      【解决方案4】:
      select p.p_id, p.name, i.i_id 
      from properties p join images i on p.p_id = i.p_id 
      where i.main=1
      

      【讨论】:

        【解决方案5】:

        您想使用如下查询:

        SELECT p.p_id, p.name, i.i_id FROM Images i INNER JOIN Properties p ON p.p_id = i.p_id WHERE i.main = 1
        

        【讨论】:

          猜你喜欢
          • 2023-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多