Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
Sql server 在存储过程中左联接的正确方法_Sql Server_Stored Procedures - Fatal编程技术网

Sql server 在存储过程中左联接的正确方法

Sql server 在存储过程中左联接的正确方法,sql-server,stored-procedures,Sql Server,Stored Procedures,我有一些关于左撇子的问题 我有这些桌子: dbo.ARoom_型 id | roomtype_name | isactive ---+---------------+----------- 1 | Presidential | 1 2 | De Luxe | 1 弱势群体 id | amenities_name | isactive ---+----------------+---------- 1 | Internet | 1 2 |

我有一些关于左撇子的问题

我有这些桌子:

dbo.ARoom_型

id | roomtype_name |  isactive
---+---------------+-----------
1  | Presidential  |    1
2  |   De Luxe     |    1
弱势群体

id | amenities_name | isactive
---+----------------+----------
1  |   Internet     |   1
2  |   Cable TV     |   1
3  |   Bath Tub     |   1
4  |   Air-con      |   1
5  |   Telephone    |   1
dbo.A详细信息:

id | roomtype_id | amenities_id
---+-------------+--------------
1  |      1      |      1
2  |      1      |      2
3  |      1      |      4
4  |      2      |      1
我试过这个问题

SELECT
    B.id as 'details_id',
    C.roomtype_name,
    A.amenities_name
FROM 
    AAmenities AS A
LEFT JOIN 
    AAmenities_details AS B ON B.amenities_id = A.id
LEFT JOIN 
    ARoom_type as C ON C.id = B.roomtype_id
  @id INT
  AS
  BEGIN TRY

  SELECT
      B.id AS 'details_id',
      C.roomtype_name,
      A.amenities_name
  FROM
      AAmenities AS A
  LEFT JOIN 
      AAmenities_details AS B ON B.amenities_id = A.id
  LEFT JOIN 
      ARoom_type AS C ON C.id = B.roomtype_id
  WHERE 
      C.id = @id
这就是我得到的

结果:

details_id | roomtype_name  | amenities_name 
-----------+----------------+----------------
    1      |   Presidential |   Internet
    2      |   De Luxe      |   Internet
    3      |   Presidential |   Cable TV
    4      |   NULL         |   Bath Tub
    5      |   Presidential |   Air-con
    6      |   NULL         |   Telephone
我可以得到所有的便利设施和所有的房间类型名称,这是我想要的,但我希望这是由房间类型,所以如果总统只有总统,我尝试了这个问题

SELECT
    B.id as 'details_id',
    C.roomtype_name,
    A.amenities_name
FROM 
    AAmenities AS A
LEFT JOIN 
    AAmenities_details AS B ON B.amenities_id = A.id
LEFT JOIN 
    ARoom_type as C ON C.id = B.roomtype_id
  @id INT
  AS
  BEGIN TRY

  SELECT
      B.id AS 'details_id',
      C.roomtype_name,
      A.amenities_name
  FROM
      AAmenities AS A
  LEFT JOIN 
      AAmenities_details AS B ON B.amenities_id = A.id
  LEFT JOIN 
      ARoom_type AS C ON C.id = B.roomtype_id
  WHERE 
      C.id = @id
我只能得到这些结果

  id  |  roomtype_name  | amenities_name
  ----+-----------------+----------------
   1  |    Presidential |   Internet
   2  |    Presidential |   Cable TV
   4  |    Presidential |   Air-con
这就是结果,当我想要的是这样:

  details_id | roomtype_name  | amenities_name 
  -----------+----------------+-----------------
      1      |   Presidential |   Internet
      3      |   Presidential |   Cable TV
      4      |   NULL         |   Bath Tub
      5      |   Presidential |   Air-con
      6      |   NULL         |   Telephone

当我想要id并且仍然获得所有便利设施的名称时,哪种查询是正确的?即使我的roomtype\u名称的值为空,如何左键连接答案?非常感谢您

您需要
aameanities\u详细信息的所有数据
,然后再试一次

SELECT
   B.id as 'details_id',
   C.roomtype_name,
   A.amenities_name
 FROM 
 AAmenities_details as B
 LEFT JOIN AAmenities  as A
   on B.amenities_id = A.id
 LEFT JOIN ARoom_type as C
   on C.id = B.roomtype_id
 WHERE B.roomtype_id = @id
但我认为每个
AAmenities\u详细信息
必须具有
AAmenities
因此您可以在
AAmenities\u details
AAmenities

SELECT
   B.id as 'details_id',
   C.roomtype_name,
   A.amenities_name
 FROM 
 AAmenities_details as B
 INNER JOIN AAmenities  as A
   on B.amenities_id = A.id
 LEFT JOIN ARoom_type as C
   on C.id = B.roomtype_id
 WHERE B.roomtype_id = @id

您需要
aamenilities\u details
的所有数据,然后重试

SELECT
   B.id as 'details_id',
   C.roomtype_name,
   A.amenities_name
 FROM 
 AAmenities_details as B
 LEFT JOIN AAmenities  as A
   on B.amenities_id = A.id
 LEFT JOIN ARoom_type as C
   on C.id = B.roomtype_id
 WHERE B.roomtype_id = @id
但我认为每个
AAmenities\u详细信息
必须具有
AAmenities
因此您可以在
AAmenities\u details
AAmenities

SELECT
   B.id as 'details_id',
   C.roomtype_name,
   A.amenities_name
 FROM 
 AAmenities_details as B
 INNER JOIN AAmenities  as A
   on B.amenities_id = A.id
 LEFT JOIN ARoom_type as C
   on C.id = B.roomtype_id
 WHERE B.roomtype_id = @id

mysql还是sql server?正确标记您的rdbms。这是
mysql
还是
sql server
?哦,对不起,是sql server mysql还是sql server?正确标记您的rdbms。这是
mysql
还是
sql server
?哦,很抱歉,它的sql server我只想看到所有设施的名称,即使roomtype名称为空,所以如果我输入id 1,结果将是:'details_id | roomtype | name |设施| name 1 | Presidential | Internet |3 |总统|有线电视4 |空|浴缸5 |总统|空调6 |空|电话|我编辑。你不应该使用
c.id=@id
,因为它可能是空的。更改为
B.roomtypeid=@id
不能相同。当
detail\u id
=4时,其
roomtype
=2,您的结果中不存在该名称。我只想看到所有设施的名称,即使roomtype名称为空,因此如果我输入id 1,结果将是:“详细信息”\u id | roomtype |名称|设施|名称1 |总统|互联网3 |总统|有线电视4 |空|浴缸5 |总统|空调6 |空|电话|我编辑。你不应该使用
c.id=@id
,因为它可能是空的。更改为
B.roomtypeid=@id
不能相同。当
detail\u id
=4时,则其
roomtype
=2,它不能存在于您的结果中。