2
+------+------+------------+------+
| id   | type| design| location   |
+------+------+------------+------+
|    1 | abc |    A  | Location X |
|    2 | abc |    A  | Location Y |
|    3 | def |    A  | Location X |
+------+------+------------+------+

我有上面的桌子。

假设我想获取位置 X 和 Y 中存在的类型。它应该返回第 1 行和第 2 行。

我应该使用什么 sql?

4

3 回答 3

2
SELECT type
FROM    tableName
WHERE   location IN ('location x','location y')
GROUP   BY type
HAVING  COUNT(*) = 2

或者,如果您想拥有所有这些值,请使用JOIn

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
          SELECT  type
          FROM    tableName
          WHERE   location IN ('location x','location y')
          GROUP   BY type
          HAVING  COUNT(*) = 2
        ) b ON a.type = b.type

资源

于 2013-01-23T08:09:28.417 回答
0

如果您只需要检索两者中都存在的类型,您应该这样做

    select [type] 
    from ur_table 
    where location = 'Location X'
    intersect 
    select [type] 
    from ur_table 
    where location = 'Location Y'

但如果你真的需要来自 2 行的所有数据.. 试试

    select id,[type],design, location 
    from ur_table L
    where L.[type] in (select [type] from ur_table where location = 'Location X'
                       intersect select [type] from ur_table where location = 'Location Y'
                       )
于 2013-01-23T12:32:30.783 回答
0
SELECT *
FROM table1
WHERE type IN(SELECT type
              FROM table1
              WHERE location IN('location X', 'location y')
              GROUP BY type
              HAVING COUNT(type) = 2
             );

SQL 小提琴演示

这会给你:

| ID | TYPE | DESIGN |   LOCATION |
-----------------------------------
|  1 |  abc |      A | Location X |
|  2 |  abc |      A | Location Y |
于 2013-01-23T08:09:28.907 回答