SQL返回多个相同的行

时间:2019-05-20 11:29:26

标签: mysql

我正在尝试选择有关客户端的信息,但PMA返回了多行。

SELECT `clients_agreements`.`date_start`,
       `buildings`.`id`, 
       `buildings`.`street`, 
       `buildings`.`street_nr`,
       `clients`.`building_id`,
       `clients_agreements`.`user_id` 
FROM `clients_agreements` 
LEFT JOIN `buildings` On `clients_agreements`.`user_id` = `buildings`.`id` 
LEFT JOIN `clients` ON `clients`.`building_id` = `buildings`.`id` 
WHERE `date_start` = (CURRENT_DATE)

我希望有一个输出,但实际输出是多次相同的行。

3 个答案:

答案 0 :(得分:1)

该联接产生笛卡尔积,因此,如果仅需要不同的结果,请使用DISTINCT

filterUsersByEmailDomain

答案 1 :(得分:0)

尝试

SELECT DISTINCT `clients_agreements`.`date_start`,
       `buildings`.`id`, 
       `buildings`.`street`, 
       `buildings`.`street_nr`,
       `clients`.`building_id`,
       `clients_agreements`.`user_id` 
FROM `clients_agreements` 
LEFT JOIN `buildings` On `clients_agreements`.`user_id` = `buildings`.`id` 
LEFT JOIN `clients` ON `clients`.`building_id` = `buildings`.`id` 
WHERE `date_start` = (CURRENT_DATE)

答案 2 :(得分:0)

FWIW,我觉得这更容易阅读:

SELECT a.date_start
     , b.id
     , b.street
     , b.street_nr
     , c.building_id
     , a.user_id 
  FROM clients_agreements a
  LEFT 
  JOIN buildings b
    On b.id = a.user_id 
  LEFT 
  JOIN clients c
    ON c.building_id = b.id 
 WHERE a.date_start = CURRENT_DATE()