如何在sql server中编写以下场景的查询?

时间:2013-01-01 08:09:51

标签: sql sql-server join

我有两张表如下..

Drug_Master

PKDrugId - int

DrugName - varchar

DrugType - varchar

Stock_Master

PKStockId - int

FKDrugId - int

Total_quantity_on_hand - int

我想在DrugName表中编写一个显示FKDrugId而不是Stock_Master的查询。

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

JOIN表如此:

SELECT
  s.PKStockId,
  d.DrugName,
  s.Total_quantity_on_hand 
FROM Stock_Master s
INNER JOIN Drug_Master d ON s.FKDrugId  = d.PKDrugId;

SQL Fiddle Demo

请详细了解JOIN s:

您可能需要LEFT JOIN而不是INNER JOIN来获取不匹配的行。例如,如果您需要在另一个Stock_Master表中包含那些没有股票条目的药品名称,您可以这样做:

SELECT
  ISNULL(s.PKStockId, 0),
  d.DrugName,
  ISNULL(s.Total_quantity_on_hand, 0) 
FROM Drug_Master d
LEFT JOIN Stock_Master s ON s.FKDrugId  = d.PKDrugId;

LEFT JOIN SQL Fiddle Demo

您可以使用相关子查询而不是JOIN,如下所示:

SELECT 
  s.PKStockId,
  (SELECT d.DrugName
   FROM  Drug_Master d 
   WHERE s.FKDrugId  = d.PKDrugId) AS DrugName,
  s.Total_quantity_on_hand 
FROM Stock_Master s;

SQL Fiddle Demo using a subquery

但最好使用JOIN