如何从两个表中选择同一字段中具有相同值的行?

Posted

技术标签:

【中文标题】如何从两个表中选择同一字段中具有相同值的行?【英文标题】:How to select rows from two tables where both have the same value in the same field? 【发布时间】:2015-03-24 11:41:16 【问题描述】:

我有两个具有相同列名的表。

两个表中都有一个名为 Call_Status 的字段。

我想从两个表中检索具有Call_Status="Open" 的记录。即我想要一个查询,它可以检索具有call_Status="Open"table1 的所有记录,然后从具有call_Status="Open"table2 检索所有记录

我不知道该怎么做,希望得到一些指导

【问题讨论】:

您的问题很难阅读 - 我已经对其进行了编辑,以便将来对其他人更有用。请确保您查看how to ask 以获得最佳答案。您还标记了 mysqlms-access。在这种情况下,您使用哪个数据库可能并不重要,但通常您不太可能同时使用 both mysqlms-access 【参考方案1】:

如果您想从第一个表中获取所有匹配的行,并从第二个表中获取所有匹配的行(而不是将行连接在一起),那么您可以使用联合。

SELECT column names FROM table1 WHERE call_status='Open'
UNION ALL
SELECT column names FROM table2 WHERE call_status='Open'

正如 Fionnuala 所指出的,您可以使用 UNION 而不是 UNION ALL 来获取唯一的行。

【讨论】:

谢谢老兄.. 成功了 请注意,UNION 用于唯一行,UNION ALL 用于更快的非唯一行。【参考方案2】:

您可以使用连接查询。

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.Call_Status=table2.Call_Status and table1.Call_Status='Open' ;

【讨论】:

它不工作。它显示如下错误:异常:[Microsoft][ODBC Microsoft Access Driver] 指定字段“Call_Date”可能引用 SQL 语句的 FROM 子句中列出的多个表。 您必须在表名前加上前缀:Select table1.Call_Status, table2.Call_Status From ... 如果你能提供你的表结构。我可以提供更好的解决方案。【参考方案3】:

您可以通过属性 call_status 连接两个表,如下所示。

SELECT (Your column names) FROM table1 INNER JOIN table2 ON Table1.call_status='open' and Table2.call_status='open';

【讨论】:

它不工作。它显示如下错误:异常:[Microsoft][ODBC Microsoft Access Driver] 指定字段“Call_Date”可能引用 SQL 语句的 FROM 子句中列出的多个表。 我认为是因为两个表都包含多个具有相同名称的列 我认为您的数据库中除了这个之外会有问题

以上是关于如何从两个表中选择同一字段中具有相同值的行?的主要内容,如果未能解决你的问题,请参考以下文章

从具有相同值的两个表中选择数据后结果重复

SQL - 选择两列中具有相同值的行

根据另一列的字段值选择具有相同列值的行

SQL查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]

从具有联合的两个表中选择一列中最大值的所有行

如何避免两个不同的线程从DB中读取相同的行(Hibernate和Oracle 10g)