MySQL,验证2条记录是否有共同字段

时间:2014-08-06 20:12:22

标签: mysql fetch

id     |     sample     |     field_a     |     field_b
-------------------------------------------------------
1      |     a     |     1     |      NULL
2      |     a     |   NULL    |       1
3      |     b     |     1     |      NULL

我想获取是否有记录具有共同的sample值,但field_a必须为'1'且field_b必须为'1'。

注意:field_a和field_b无法在相同的记录中定义(每个记录中的field_a或field_b)。

根据我展示的示例,我应该返回TRUE,因为我有2个记录,其中'a'值,field_a = 1,field_b = 1。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

你可以通过自我加入来做到这一点:

SELECT 
    e.id, 
    e.sample, 
    e.field_a, 
    e1.field_b 
FROM 
    example e
INNER JOIN 
    example e1
ON 
    e.id < e1.id
WHERE 
    e.field_a = 1 AND e1.field_b = 1;

条件

e.id < e1.id

注意每个组合只会被评估一次,并且它们位于不同的行中。

<强> Demo

要仅获得True(1)或False,请将此查询修改为

  SELECT 
     (COUNT(e.id)>0) as result
  FROM 
     example e
  INNER JOIN 
     example e1
  ON e.id < e1.id
  WHERE e.field_a = 1 AND e1.field_b = 1
  GROUP BY e.id;

<强> Demo

答案 1 :(得分:0)

使用一些MySQL&#39; isms,您可以使用简单的GROUP BY;

SELECT CASE WHEN EXISTS (
  SELECT 1 FROM mytable
  GROUP BY sample
  HAVING MAX(field_a=1) AND MAX(field_b=1)
) THEN 'TRUE' ELSE 'FALSE' END `match`;

An SQLfiddle to test with

答案 2 :(得分:0)

创建一个视图(或子查询),对数据进行分组,如下所示:

select sample, MAX(field_a) as field_a, MAX(field_b) as field_b, count(sample) as entries from test
group by sample

现在您的结果将如下所示:

  

示例field_a field_b条目

     

a 1 1 2

     

b 1 NULL 1

从这里您可以选择field_a和field_b为1的所有样本。

使用视图可以更轻松地进行测试和审核,但如果您愿意,也可以从这些查询结果中进行选择。