Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.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 SQL的子查询_Mysql_Sql Server_Join - Fatal编程技术网

Mysql SQL的子查询

Mysql SQL的子查询,mysql,sql-server,join,Mysql,Sql Server,Join,我需要帮助使用子查询将两个查询语句连接在一起。我对如何将两者结合起来感到困惑。我感谢你的帮助 SELECT * FROM MEDICAL_PROCEDURE JOIN PROCEDURE_CATEGORY ON medical_procedure.procedure_category_id = PROCEDURE_CATEGORY.PROCEDURE_CATEGORY_ID; SELECT Medical_procedure.medical_procedure_id,

我需要帮助使用子查询将两个查询语句连接在一起。我对如何将两者结合起来感到困惑。我感谢你的帮助

SELECT * FROM MEDICAL_PROCEDURE
JOIN PROCEDURE_CATEGORY ON medical_procedure.procedure_category_id = PROCEDURE_CATEGORY.PROCEDURE_CATEGORY_ID;

SELECT 
      Medical_procedure.medical_procedure_id,
      COUNT(procedure_tool_supply.medical_procedure_id) AS Supply_Needed
FROM Procedure_tool_supply
JOIN Medical_Procedure on Procedure_tool_supply.medical_procedure_id = Medical_procedure.medical_procedure_id
GROUP BY Procedure_tool_supply.medical_procedure_id
HAVING COUNT(Procedure_tool_supply.medical_procedure_id) < 3;

在没有测试数据的情况下无法进行真正的测试,但这应该是可行的。希望我正确地理解了您的意图:

SELECT * 
FROM 
  MEDICAL_PROCEDURE P
  JOIN PROCEDURE_CATEGORY C ON 
    P.procedure_category_id = C.PROCEDURE_CATEGORY_ID
  cross apply (
    SELECT 
      COUNT(T.medical_procedure_id) AS Supply_Needed
    FROM 
      Procedure_tool_supply T
    where 
      T.medical_procedure_id = P.medical_procedure_id
    GROUP BY 
      T.medical_procedure_id
    HAVING 
      COUNT(T.medical_procedure_id) < 3
  ) T

现在还不清楚你想要实现什么。但是,如果您的目的是在第一个查询的每一行上包含第二个查询的派生Supply\u Required列,并将返回的行限制为第二个查询返回了medical\u procedure\u id值的行,那么

你可以这样做:

SELECT mp.*
     , pc.*
     , ct.Supply_Needed
  FROM MEDICAL_PROCEDURE mp
  JOIN PROCEDURE_CATEGORY pc
    ON mp.procedure_category_id = pc.PROCEDURE_CATEGORY_ID
  JOIN ( SELECT pr.medical_procedure_id
              , COUNT(ts.medical_procedure_id) AS Supply_Needed
           FROM Procedure_tool_supply ts
           JOIN Medical_Procedure pr
             ON ts.medical_procedure_id = pr.medical_procedure_id
          GROUP BY ts.medical_procedure_id
         HAVING COUNT(ts.medical_procedure_id) < 3
       ) ct
    ON ct.medical_procedure_id = mp.medical_procedure_id

你能分享一下你的桌子结构吗?n详细说明您希望结果如何?这是针对mysql还是sql server的?这是两个完全不同的数据库引擎。