在MySQL数据库中,我有两个表。我需要计算tbl1
中tbl2
中有多少行匹配tbl1
code (pk)
label
tbl2
id
code1 (fk to tbl1.code if there is a match for a given row)
reltype
。以下是简化的相关表结构:
SELECT code, label FROM tbl1 INNER JOIN tbl2 ON tbl1.code=tbl2.code1
WHERE reltype='desiredtype';
我有以下sql开头:
tbl2
我认为这告诉我tbl1
中有多少行在tbl1中匹配。它是否正确?另外,我发布的原因是,如何更改此内容以确定tbl2
中{{1}}中有多少行匹配?
答案 0 :(得分:3)
select count(*) from tbl1
where code in (select code1 from tbl2)
也许?可能需要distinct(code1)
进行优化。
答案 1 :(得分:1)
SELECT
COUNT(tbl1.code)
FROM
tbl1 INNER JOIN tbl2 ON tbl1.code=tbl2.code1
WHERE
tbl2.reltype='desiredtype'
GROUP BY
tbl1.code
答案 2 :(得分:1)
SELECT
COUNT(t1.code) Cnt
FROM tbl1 T1
JOIN tbl1 T2
ON T1.code = T2.code1
WHERE T2.reltype='desiredtype'
GROUP BY T1.code
答案 3 :(得分:1)
您的查询是正确的。内连接提供tbl1和tbl2中是否存在唯一匹配。
SELECT tb1.code, tb1.label FROM tbl1 INNER JOIN tbl2 ON tbl1.code=tbl2.code1
WHERE reltype='desiredtype';
您可以在不同的情况下使用左连接或右连接。
答案 4 :(得分:1)
有几种方法。
假设您在tbl1中有一个PRIMARY KEY,您可以执行类似于您的查询,但添加GROUP BY tbl1.pk
以消除重复项,并将该查询作为内联视图引用以获取行数由该查询返回。 (这不是最有效的方法。)
如果您只想要一个计数,那么您可以修改您的查询以执行SELECT COUNT(DISTINCT tbl1.pk)
。 DISTINCT
聚合中的COUNT()
修饰符仅计算唯一值,即表达式的任何重复值都不会包含在COUNT()
中。这可能是最有效的方法:
SELECT COUNT(DISTINCT tbl1.code)
FROM tbl1
JOIN tbl2
ON tbl2.code1 = tbl1.code
AND tbl2.reltype='desiredtype';
还有其他几种选择。一种方法是加入内联视图,该视图从tbl2获取不同的列表,例如
SELECT COUNT(1)
FROM tbl1
JOIN (SELECT tbl2.code1
FROM tbl2
WHERE tbl2.reltype = 'desiredtype'
GROUP BY tbl2.code1
) d
ON d.code1 = tbl1.code