SQL多重选择基于单个表上的键

时间:2012-08-15 22:13:05

标签: sql

如果有人在这里可以回答,请提前致谢。 我有这两个表:

      Strings                Numbers
 ----------------        ----------------
| ID  |  String  |      | ID  |  Number  |
 ----------------        ----------------
|  1  |    'A'   |      |  1  | 'First'  |
|  1  |    10    |      |  2  | 'Second' |
 ----------------       |  3  | 'Third'  |
|  2  |    'B'   |      |  4  | 'Fourth' |
|  2  |    11    |      |  5  | 'Fifth'  |
 ----------------        ----------------
|  3  |    'A'   |
|  3  |    12    |
 ----------------
|  4  |    'B'   |
|  4  |    13    |
 ----------------
|  5  |    'B'   |
|  5  |    14    |
 ----------------

例如,我使用'A'过滤“关联”的值,我必须得到一个这样的表:

     Strings
 ----------------
| ID  |  String  |
 ---------------- 
|  1  |    10    |
 ---------------- 
|  3  |    12    |
 ----------------

例如,如果想过滤“关联”与'B'的值,我必须得到一个这样的表:

      Strings
 ----------------
| ID  |  String  |
 ---------------- 
|  2  |    11    |
 ----------------
|  4  |    13    |
 ----------------
|  5  |    14    |
 ----------------

再次,谢谢你能帮助我。

3 个答案:

答案 0 :(得分:2)

除非我遗漏了你会使用的东西:

select s1.id, s1.string
from strings s1
inner join strings s2
    on s1.id = s2.id
    and s1.string != 'A'
    and s2.string = 'A'

请参阅SQL Fiddle with Demo

或者

select s1.id, s1.string
from strings s1
inner join strings s2
    on s1.id = s2.id
    and s1.string != 'B'
    and s2.string = 'B'

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

SELECT * FROM Strings WHERE string = "A"

根据需要替换*的字段名称。

答案 2 :(得分:0)

select s2.ID,
       s2.String
  from Strings as s1
 inner join Strings as s2
    on s2.id = s1.id
   and s2.String != s1.String
 where s1.String = ?

但是,这种表结构值得怀疑。 ID似乎应该是主键,但它不能是因为有多个值。你也永远不需要Numbers表,为什么要把它包含在问题中呢? :)