如何获得至少与所有内容相关联的ID?

时间:2015-08-21 10:05:43

标签: sql

假设我们有数据库:

-----------
| A -|- B |
|----|----|
| 1  |  1 |
| 1  |  2 |
| 2  |  1 |
-----------

AB是主键。假设我们想要获得包含A中1和2的元素的所有B

SELECT A FROM Table WHERE B = 1 AND B = 2;

上述操作失败,因为它永远不会成立,因为查询仅适用于单个记录。

SELECT A FROM Table WHERE B = 1 OR B = 2;

工作但错误地包含主键值2,它仅映射到B中的1,而不是B中的1和2。

5 个答案:

答案 0 :(得分:4)

GROUP BY解决方案,返回(1,2)中包含1个以上不同b值的所有内容:

select a from table
where b in (1,2)
group by a
having count(distinct b) > 1

或者,JOIN解决方案:

select distinct a
from (select a from table where b = 1) t1
join (select a from table where b = 2) t2
  on t1.a = t2.a

INTERSECT解决方案:

select a from table where b = 1
intersect
select a from table where b = 2

修改

GROUP BY查询或许HAVING count distinct版本更快:

select a from table
where b in (1,2)
group by a
having max(b) <> min(b)

答案 1 :(得分:1)

您可以使用jarlh中的group by方法或使用'distinct'进行连接:

SELECT DISTINCT A
FROM Table AS T
WHERE EXISTS (SELECT 1 from Table WHERE Table.A = T.A and B = 1)
AND EXISTS (SELECT 1 from Table WHERE Table.A = T.A and B = 2)

答案 2 :(得分:1)

这样的事情(假设您需要按B中的特定ID进行过滤。

 int counter = contextMenuStrip.Items.Count;

 if (contextMenuStrip.Items.Count != (Items.Count))

 {

      contextMenuStrip1.Items.Add(Items.ElementAt(counter));

      ItemInsertion(contextMenuStrip, Items);

 }

 return contextMenuStrip;

答案 3 :(得分:1)

试试这个

function field_ticker_callback() {
    $ticker_value = get_option("ticker"); ?>

        <input type="text" name="ticker" value="<?php echo $ticker_value; ?>" />

    <?php
    //echo "<input type="text" name="ticker" value="$ticker_value" />";
}

答案 4 :(得分:0)

  • A不能作为主键,因为该列包含重复项。
  • 一种可能的解决方案:

    SELECT * FROM (SELECT A, group_concat(B, ',') AS C FROM tab GROUP BY A) s WHERE s.C = "1,2";