0

如果有人在这里可以回答,请提前感谢。我有这两张桌子:

      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    |
 ----------------

再次感谢您能帮助我。

4

3 回答 3

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

或者

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

于 2012-08-15T22:18:13.707 回答
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 表,那么为什么将其包含在问题中?:)

于 2012-08-15T22:39:39.760 回答
0
SELECT * FROM Strings WHERE string = "A"

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

于 2012-08-15T22:16:20.733 回答