Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 连接两个查询_Sql - Fatal编程技术网

Sql 连接两个查询

Sql 连接两个查询,sql,Sql,第一次查询的结果是 select a.Enquiry_Id,a.Ckeck_In,a.check_Out,a.Hotel_Name,a.Meal_Plan,a.Room_Type,a.Occupancy_Type,a.Room_QT,a.Adults from Accomodation a where a.Enquiry_Id = 74 select q.Enquiry_Id,q.Start,q1.Stay_At from Quick_Plan q,Quick_Plan q1 where q

第一次查询的结果是

select a.Enquiry_Id,a.Ckeck_In,a.check_Out,a.Hotel_Name,a.Meal_Plan,a.Room_Type,a.Occupancy_Type,a.Room_QT,a.Adults from Accomodation a 
where a.Enquiry_Id = 74

select q.Enquiry_Id,q.Start,q1.Stay_At from Quick_Plan q,Quick_Plan q1 where q.Enquiry_Id = 74 and q1.Enquiry_Id = 74 and q.Stay_At = q1.Start
第二次查询的结果是

74  2013-08-03  2013-08-04  ADS CP          deluxe  Double  1   2 
我想结合这两个查询,得到如下结果

74  Ahmedabad   Agra

在您的情况下,最简单的方法是使用CTE,因为它们不需要太多修改

74  2013-08-03  2013-08-04  ADS CP          deluxe  Double  1   2 Ahmedabad Agra
我认为正确的方法是:

;WITH FirstCTE AS
(
    SELECT    a.Enquiry_Id, 
              a.Ckeck_In,
              a.check_Out,  
              a.Hotel_Name, 
              a.Meal_Plan,
              a.Room_Type,
              a.Occupancy_Type,
              a.Room_QT,
              a.Adults 
    FROM      Accomodation a 
    WHERE     a.Enquiry_Id = 74
),
SecondCTE AS
(
    SELECT    q.Enquiry_Id,
              q.Start,
              q1.Stay_At 
    FROM      Quick_Plan q,
              Quick_Plan q1 
    WHERE     q.Enquiry_Id = 74 
              and q1.Enquiry_Id = 74 
              and q.Stay_At = q1.Start
)

SELECT * 
FROM   FirstCTE F
       JOIN SecondCTE S
       ON F.Enquiry_Id = S.Enquiry_Id

假设a.inquiry\u Id和q.inquiry\u Id是您加入的密钥

SELECT    a.Enquiry_Id, 
          a.Ckeck_In,
          a.check_Out,  
          a.Hotel_Name, 
          a.Meal_Plan,
          a.Room_Type,
          a.Occupancy_Type,
          a.Room_QT,
          a.Adults ,
          q.Start,
          q1.Stay_At 
FROM      Accomodation a 
          JOIN Quick_Plan q
              ON a.Enquiry_Id = q.Enquiry_Id
          JOIN Quick_Plan q1 
              ON q.Enquiry_Id = q1.Enquiry_Id 
              and q.Stay_At = q1.Start
WHERE     a.Enquiry_Id = 74

试试这个

我可能累了;所需结果与第一个选择结果之间有什么区别?@u07ch第二个选择结果返回的两个额外字段。如果三个答案中的任何一个都没有得到正确的结果,请建议进行其他查询。所有这些查询都像交叉连接一样处理我的数据。问题是,我不太理解你的第二个查询。起初我以为这是Quick_Plan表上的某种自联接,但后来我注意到您使用了查询Id,我认为它是您的主键,这对我来说毫无意义。那么,你能提供一些关于数据库数据的更多信息吗?提供两个表的查询信息将非常好…我有两个表,第一个是quickplan,另一个是住宿quickplan表包含有关旅游的信息,如checkindate checkout day tour strat,从stayat places的旅游终点开始,住宿包含有关人员住宿的酒店的信息,我必须创建一张凭证,其中我需要住宿表中的一些信息和quickplan中的一些信息quickplan中的信息通过在quickplan表中应用selfjoin来检索quickplan中的信息现在我想加入这两个查询。如果仍然需要了解prblm,我可以给你两个表的结构数据RH-02/09/2013-4 2013-09-10 2013-09-11阿巴德机场酒店地图请选择请选择1 2 RH-02/09/2013-4 2013-09-11 2013-09-12 Devinshare CP DELUX Single 12我猜这两行来自住宿表,是真的吗?首先,我建议您不要保存,当您的值未定义时,请选择作为值。像NULL,甚至0这样的东西会更好。其次,将诸如RoomType之类的枚举类型保存为字符串是不正确的。最好将它们保存为整数,然后使用映射表进行转换。例如,0=单人房,1=双人房,3=豪华房等。
 SELECT a.Enquiry_Id, a.Ckeck_In, a.check_Out, a.Hotel_Name, a.Meal_Plan,  a.Room_Type, a.Occupancy_Type, a.Room_QT, a.Adults,q.Start, q1.Stay_At 
 FROM Accomodation a 
 INNER JOIN Quick_Plan q ON a.Enquiry_Id = q.Enquiry_Id
 INNER JOIN Quick_Plan q1 ON q1.Enquiry_Id = q.Enquiry_Id
 WHERE a.Enquiry_Id = 74 AND
    q.Stay_At = q1.Start
select
a.Enquiry_Id,
a.Ckeck_In,
a.check_Out,
a.Hotel_Name,
a.Meal_Plan,
a.Room_Type,
a.Occupancy_Type,
a.Room_QT,
a.Adults,
q.Enquiry_Id,
q.Start,
q1.Stay_At 
from 
Accomodation a, 
Quick_Plan q, 
Quick_Plan q1 
where 

q.Enquiry_Id = 74 
and q1.Enquiry_Id = 74 
and q.Stay_At = q1.Start 
and a.Enquiry_Id = 74