【问题标题】:How do I combine results from more than one table?如何合并来自多个表的结果?
【发布时间】:2018-02-26 02:26:36
【问题描述】:

我必须表格:城市和客户

城市:city_id、city_name

  1. 纽约
  2. 阿姆斯特丹
  3. 巴黎
  4. 米兰

客户: 包含个人信息的列,但以下两列是重要的:plac_of_residence_id 和 place_of_birth_id。这两列包含来自城市的不同值。例如:

  1. client_id: 1
  2. client_name:约翰
  3. client_sex: 男
  4. plac_of_residence_id: 3 (cities_id)
  5. place_of_birth_id: 1 (cities_id)

如何从表格城市获得两个不同的值?

我的sql语句如下:

SELECT * FROM clients C LEFT JOIN cities C ON C.plac_of_residence_id = C.cities_id AND place_of_birth_id = C.cities_id WHERE C.client_id = $client_id";

plac_of_residence_id 的城市名称与 place_of_birth_id 相同,而不是两个不同的城市

我如何获得输出:巴黎和纽约?

【问题讨论】:

    标签: php mysql sql sqlite pdo


    【解决方案1】:

    您必须使用 OR,而不是在语句中使用 AND:

    SELECT * FROM clients C LEFT JOIN cities C ON C.plac_of_residence_id = C.cities_id OR place_of_birth_id = C.cities_id WHERE C.client_id = $client_id";
    

    这是因为您想要同时拥有:出生城市和当前居住地。上面的例子:

    对于 John,如果城市表中的当前行为否,则连接要求(您的“ON”部分)应评估为真。 3 或没有。 1 因为 John 与这两个条目都有关系。

    【讨论】:

      【解决方案2】:

      你应该加入两次城市

      "SELECT C.*, a.*, b.* FROM clients C 
      LEFT JOIN cities a ON C.plac_of_residence_id = a.cities_id 
      LEFT JOIN cities b on  c.place_of_birth_id = b.cities_id 
      WHERE C.client_id = $client_id";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多