【问题标题】:sql join or union query on booking system预订系统上的 sql join 或 union 查询
【发布时间】:2013-04-20 22:44:02
【问题描述】:

在加入、工会、ON-s 等方面我不是很有经验 但我有一所学校,我需要从两个中选择客户名称 餐桌、贵宾和常客。

我正在尝试两种方式,但不幸的是,没有任何效果: //1

SELECT Hotel_Rooms.Book_From, Hotel_Rooms.Book_To, Hotel_Rooms.[Book_To]-[Book_From] AS Booked_Days, Hotel_Rooms.[Price_Per_Night]*[Booked_Days] AS Price, Reg_Customers.Cust_name
FROM Reg_Customers
UNION
SELECT Hotel_Rooms.Book_From, Hotel_Rooms.Book_To, Hotel_Rooms.[Book_To]-[Book_From] AS Booked_Days, Hotel_Rooms.[Price_Per_Night]*[Booked_Days] AS Price, Vip_Customers.Cust_name
FROM Vip_Customers
INNER JOIN Hotel_Rooms ON Reg_Customers.Cust_ID = Hotel_Rooms.Cust_ID && Vip_Customers.Cust_ID = Hotel_Rooms.Cust_ID
ORDER BY Hotel_Rooms.[Price_Per_Night]*[Booked_Days] DESC;

//2

SELECT Hotel_Rooms.Book_From, Hotel_Rooms.Book_To, Hotel_Rooms.[Book_To]-[Book_From] AS Booked_Days, Hotel_Rooms.[Price_Per_Night]*[Booked_Days] AS Price, Reg_Customers.Cust_name, Vip_Customers.Cust_name
FROM Reg_Customers, Vip_Customers
INNER JOIN Hotel_Rooms ON Reg_Customers.Cust_ID = Hotel_Rooms.Cust_ID && Vip_Customers.Cust_ID = Hotel_Rooms.Cust_ID
ORDER BY Hotel_Rooms.[Price_Per_Night]*[Booked_Days] DESC;

所有查询都不能正确选择、连接表。你能帮忙吗? 如果这些有帮助,表格方案

Rooms { Rooms_ID, Cust_ID, Room_Capacity, Available, Book_Time, Book_Price_Per_Night, Book_From, Book_To }

普通客户 {Cust_ID, Cust_Name, Cust_Phone, Cust Card} vip {Cust_ID, Cust_Name, Cust_Phone, Cust Card}

谢谢。 如果您可以提供一个有效的查询,无论是#1 还是#2 版本都很棒, 谢谢。

【问题讨论】:

    标签: sql join union


    【解决方案1】:

    您的第二种方法更好,但您犯了一个错误。您可以像这样加入表格:

    from table1, table2
    where table1.id = table2.id
    

    或者像这样(哪个更好)

    from table1 join table2 on table1.id = table2.id
    

    但您不能在同一个查询中同时使用这两种技术。这就是您在第二个示例中的内容。

    编辑从这里开始

    再次阅读您的问题,联合查询是一种更好的方法。但是,您在这里犯了两个错误:

    FROM Vip_Customers
    INNER JOIN Hotel_Rooms ON Reg_Customers.Cust_ID = Hotel_Rooms.Cust_ID 
    && Vip_Customers.Cust_ID = Hotel_Rooms.Cust_ID
    ORDER BY Hotel_Rooms.[Price_Per_Night]*[Booked_Days] DESC;
    

    第一个错误是在逻辑上。您从 vip 客户中选择,但从普通客户表中加入。第二个错误是语法。将“&&”替换为“和”。据我所知,没有任何 RDBMS 支持“&&”。

    【讨论】:

    • 你好,谢谢你的回答,我现在感觉有点笨,实际上我加入了3张桌子,贵宾客户,常客和房间,我怎样才能用你的方法来实现呢?谢谢。
    • 或者更好的是,考虑到我发布的代码,您有什么办法可以使用该代码提出解决方案。如果不是不放心,我不想让你难堪。还是谢谢。
    【解决方案2】:

    不知道你的数据库有点棘手,但根据你提供的内容,这个联合/排序可能会起作用

    { 
        SELECT hr.Book_From, hr.Book_To, hr.[Book_To]-[Book_From] AS Booked_Days, hr.[Price_Per_Night]*[Booked_Days] AS Price, rc.Cust_name
        FROM Reg_Customers rc
        LEFT JOIN Hotel_Rooms AS hr ON rc.Cust_ID = hr.Cust_ID
    } UNION {
        SELECT hr.Book_From, hr.Book_To, hr.[Book_To]-[Book_From] AS Booked_Days, hr.[Price_Per_Night]*[Booked_Days] AS Price, vc.Cust_name
        FROM Vip_Customers vc
        LEFT JOIN Hotel_Rooms AS hr ON vc.Cust_ID = hr.Cust_ID
    }
    ORDER BY [Price_Per_Night]*[Booked_Days] DESC;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多