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。
我该怎么做?
答案 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`;
答案 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的所有样本。
使用视图可以更轻松地进行测试和审核,但如果您愿意,也可以从这些查询结果中进行选择。