Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询:合并三个表中的行并作为一个表输出_Mysql_Sql - Fatal编程技术网

MySQL查询:合并三个表中的行并作为一个表输出

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

我想从三个表中提取信息,这三个表通过某些ID相互链接。你能告诉我怎么做吗。我试过了,但是三张桌子有点太复杂了。以下是我试图做的:

因此,基本上,从以上三个表中,我想将用户与各自的PID进行匹配,只显示特定规格类型的计数,例如示例中所示的圆形。(同样的PID也可能分配给两个不同的用户,如用户AAA和BBB的PID=1)


你能告诉我怎么做吗

先来点什么

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