-6

我有一张如下表。

ID   NAME
1    JOHN
2    JANE
3    JACK

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

条件是:

一世。结果必须返回 JOHN 和 JANE。

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

4

3 回答 3

3

您可以使用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');

SQL Fiddle (MySQL) 上的示例

SQL Fiddle (Oracle) 上的示例

SQL Fiddle (Postgresql) 上的示例

于 2013-04-16T10:05:48.100 回答
0
  1. 创建函数JohnAndJaneBothExist()

2.

SELECT * FROM TABLENAME 
WHERE
  JohnAndJaneBothExist and
  Name In ('John', 'Jane')
于 2013-04-16T12:17:42.347 回答
0

尝试这个:

SELECT 
  GROUP_CONCAT( `NAME` ) as names
FROM `TABLE`
WHERE 1
   AND NAME IN ('JOHN','JANE')
HAVING names= 'JOHN,JANE'
于 2013-04-16T10:15:00.187 回答