SQL - 仅在条件匹配时选择 [关闭]

Posted

技术标签:

【中文标题】SQL - 仅在条件匹配时选择 [关闭]【英文标题】:SQL - Select only when the condition matches [closed] 【发布时间】:2013-04-08 16:29:53 【问题描述】:

我有一张如下表。

ID   NAME
1    JOHN
2    JANE
3    JACK

在简单的 select 语句中,如何从表中查询 JOHN 和 JANE?

条件是:

我。结果必须返回 JOHN 和 JANE。

二。如果从表中删除了 JOHN 或 JANE,它将只返回空结果。

【问题讨论】:

这看起来有点像家庭作业 -1 没有证据表明您已经尝试过什么,遇到了什么问题等。提出家庭作业问题没问题,但至少在要求您的员工做之前自己尝试一下给你。 请表现出一些努力...你尝试了什么? 你为什么用OraclePostgresqlmysql标记。你用的是哪一个? 还有什么是明显任意禁止 GROUP BY 或自我加入的原因,因为这些几乎是实现您想要的最简单的方法。请提供现实世界的理由,否则这只是“代码高尔夫”,因此是题外话。 【参考方案1】:

您可以使用GROUP BY/HAVING 来确保有 2 个匹配项:

SELECT  Name
FROM    T
WHERE   Name IN ('JOHN', 'JANE')
AND     EXISTS
        (   SELECT  1
            FROM    T
            WHERE   Name IN ('JOHN', 'JANE')
            HAVING  COUNT(DISTINCT Name) = 2
        );

或者您可以使用自联接:

SELECT  a.Name
FROM    T a
        INNER JOIN T b
            ON a.Name != b.Name
WHERE   a.Name IN ('JOHN', 'JANE')
AND     b.Name IN ('JOHN', 'JANE');

Examples on SQL Fiddle (MySQL)

Examples on SQL Fiddle (Oracle)

Examples on SQL Fiddle (Postgresql)

【讨论】:

【参考方案2】:

试试这个:

SELECT 
  GROUP_CONCAT( `NAME` ) as names
FROM `TABLE`
WHERE 1
   AND NAME IN ('JOHN','JANE')
HAVING names= 'JOHN,JANE'

【讨论】:

【参考方案3】:
    创建函数JohnAndJaneBothExist()

2.

SELECT * FROM TABLENAME 
WHERE
  JohnAndJaneBothExist and
  Name In ('John', 'Jane')

【讨论】:

以上是关于SQL - 仅在条件匹配时选择 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

XQuery sql 仅在存在时选择节点

Sql Server:如何仅在存在时才选择列?

从字段不匹配条件的表中选择

选择查询和操作查询有何区别?

Redshift 在多个条件下加入,但仅在一个条件不匹配时返回

在 SQL 中检查 IF 条件,即使它不匹配