【问题标题】:Select from two tables WHERE only 1 unique result from table_1从两个表中选择其中只有 1 个来自 table_1 的唯一结果
【发布时间】:2014-07-12 04:34:53
【问题描述】:

我一直在寻找,似乎无法弄清楚如何获得以下信息,任何帮助非常感谢

鉴于这些表格:

表_1

+-----------+----------+-------+
| firstName | lastName |  zip  |
+-----------+----------+-------+
| John      | Doe      | 80210 |
| Barty     | Crouch   | 80598 |
| Mary      | Jane     | 80233 |
| John      | Doe      | 80210 |
+-----------+----------+-------+

表_2

+-----------+----------+-------+
| firstName | lastName |  zip  |
+-----------+----------+-------+
| John      | Doe      | 80210 |
| Barty     | Crouch   | 80598 |
| Max       | Payne    | 80233 |
+-----------+----------+-------+

如果 Table_1 中该记录只有一个结果,我该如何选择表之间的匹配记录?

这样的事情(作为查询应该做什么的例子写出来的结尾部分是我无法弄清楚的)

SELECT Table_1.firstName,
   Table_1.lastName,
   Table_1.zip,
   Table_2.firstName,
   Table_2.lastName,
    Table_2.zip
FROM Table_1, Table_2
WHERE Table_1.firstName = Table_2.firstName and Table_1.lastName = Table_2.lastName and Table_1.zip = Table_2.zip
and ONLY ONE RESULT First,Last,zip FROM TABLE_1

这只会返回 Barty Crouch 80598

【问题讨论】:

  • 为什么返回多余的列而不是三个?

标签: mysql sql


【解决方案1】:

加入派生表,该表是 table_1 中只有 1 个组计数的行的分组列表。:

SELECT T2.FirstName, T2.LastName, T2.Zip
FROM TABLE_2 AS T2
JOIN (
SELECT T1.FirstName, T1.LastName, T1.Zip
FROM TABLE_1 AS T1
GROUP BY T1.FirstName, T1.LastName, T1.Zip
HAVING COUNT(*) = 1) AS T1
  ON T1.FirstName = T2.FirstName
 AND T1.LastName = T2.LastName
 AND T1.Zip = T2.Zip

【讨论】:

  • 这工作谢谢!我花了一段时间才让它在非常大的数据集上运行(对于这些稍微复杂的大量数据的 sql 来说是新手)。 SELECT T2.FirstName, T2.LastName, T2.mZip5, T2.BSDID, T2.Email, T2.Homephone, T2.MobilePhone FROM vanmatch.bsd AS T2 JOIN EACH ( SELECT T1.FirstName, T1.LastName, T1.mZip5 FROM vanmatch.van AS T1 GROUP BY T1.FirstName, T1.LastName, T1.mZip5 HAVING COUNT(*) = 1) AS T1 ON T1.FirstName = T2.FirstName AND T1.LastName = T2.LastName AND T1.mZip5 = T2.mZip5
【解决方案2】:

许多可能的变体之一:

SELECT Table_1.firstName,
   Table_1.lastName,
   Table_1.zip
FROM Table_1, Table_2
WHERE Table_1.firstName = Table_2.firstName and Table_1.lastName = Table_2.lastName and Table_1.zip = Table_2.zip
group by table_1.firstname, table_1.lastname, table_1.zip
having count(*) = 1

【讨论】:

    猜你喜欢
    • 2022-11-14
    • 2018-11-04
    • 1970-01-01
    • 2016-01-18
    • 2017-02-23
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多