MySQL查询:合并三个表中的行并作为一个表输出
我想从三个表中提取信息,这三个表通过某些ID相互链接。你能告诉我怎么做吗。我试过了,但是三张桌子有点太复杂了。以下是我试图做的: 因此,基本上,从以上三个表中,我想将用户与各自的PID进行匹配,只显示特定规格类型的计数,例如示例中所示的圆形。(同样的PID也可能分配给两个不同的用户,如用户AAA和BBB的PID=1)MySQL查询:合并三个表中的行并作为一个表输出,mysql,sql,Mysql,Sql,我想从三个表中提取信息,这三个表通过某些ID相互链接。你能告诉我怎么做吗。我试过了,但是三张桌子有点太复杂了。以下是我试图做的: 因此,基本上,从以上三个表中,我想将用户与各自的PID进行匹配,只显示特定规格类型的计数,例如示例中所示的圆形。(同样的PID也可能分配给两个不同的用户,如用户AAA和BBB的PID=1) 你能告诉我怎么做吗 先来点什么 SELECT T1.USER, T1.PID, IFNULL(COUNT(T3.SPEC), 0) FROM Table1 T1
你能告诉我怎么做吗 先来点什么
SELECT
T1.USER,
T1.PID,
IFNULL(COUNT(T3.SPEC), 0)
FROM
Table1 T1 LEFT JOIN Table2 T2
ON T1.PID = T2.PID
JOIN Table3 T3
ON T2.LID = T3.LID
WHERE T3.SPEC = 'ROUND'
这可能不会显示用户AAA的第一行,因为您尚未进行外部联接,因此AAA行将遇到表2中的空值,因此从结果中删除。是否仅返回单个用户条目?我不知道为什么?@Johnydep:因为@josh.trow忘了添加GROUP BY。除了缺少GROUP BY之外,还有另一个问题:此解决方案不会显示计数为零的用户。@Andriy M不太清楚,结果只有一个条目。虽然我想检索按用户列排序的所有用户。这是什么(+),但我收到一个错误,说我的语法不正确(+)用作外部联接指示符,我在Oracle中经常使用它,但让我尝试查找MySQL的等效项它类似于左联接吗?是的,但在Oracle中,您可以在WHERE子句或FROM子句中指定联接类型,但是在MySQL中,您只能在FROM子句中指定联接。sql支持什么,比如在另一个查询中使用一个sql查询的输出吗?谢谢@Andriy M,它工作起来就像一种享受。你解决了我的问题。非常感谢
select user,pid,count(*) from (
select table1.user,table1.pid,table3.spec
from
table1,
table2,
table3
where
table1.pid=table2.pid(+)
and table2.lid=table3.lie(+)
and table3.spec='Round'
)
group by user,pid
SELECT
t1.USER,
t1.PID,
COUNT(T3.SPEC) AS CountRound
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.PID = t2.PID
LEFT JOIN Table3 t3 ON t2.LID = t3.LID AND t3.SPEC = 'ROUND'
GROUP BY
t1.USER,
t1.PID