Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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中显示3个不同表中的多列?_Mysql_Sql_Database - Fatal编程技术网

Mysql 如何在SQL中显示3个不同表中的多列?

Mysql 如何在SQL中显示3个不同表中的多列?,mysql,sql,database,Mysql,Sql,Database,我有三张桌子: 预订、旅行、顾客 我只需要显示有多个预订的客户的行程名称、行程类型、客户名字、客户姓氏 有点像这样 预订表 预订号。。客户数量 16001 101 16002 101 16003 102 16004 103 16005 103 客户表 客户识别号。。客户数量 30 101 31 102 32 103 Customer表的主ID是Customer_ID,列名

我有三张桌子:

预订、旅行、顾客

我只需要显示有多个预订的客户的行程名称、行程类型、客户名字、客户姓氏

有点像这样

预订表

预订号。。客户数量

16001 101 16002 101 16003 102 16004 103 16005 103 客户表

客户识别号。。客户数量

30 101 31 102 32 103 Customer表的主ID是Customer_ID,列名称为 Customer_Num。此列名也在预订表中

预订表的主id是预订\u id

我试过:

SELECT Customer.First_Name, Customer.Last_Name, Trip.Trip_Name, Trip.Type, Reservation.Customer_Num COUNT(Reservation.Customer_Num
FROM Reservation, Customer, Trip
WHERE Reservation.Customer_Num = Customer.Customer_Num
HAVING COUNT(Reservation.Customer_Num) > 1
GROUP BY Customer.First_Name, Customer.Last_Name, Trip.Trip_Name, Trip.Type, Reservation.Customer_Num;

假设您的行程表中有行程名称、行程类型等列,您可以尝试下面的查询-

SELECT Customer.First_Name
      ,Customer.Last_Name
      ,Trip.Trip_Name
      ,Trip.Type
      ,Reservation.Customer_Num
      ,COUNT(Reservation.Customer_Num) Customer_Num_Cnt
FROM Reservation R
INNER JOIN Customer C ON Reservation.Customer_Num = Customer.Customer_Num
INNER JOIN Trip T ON R.TRIP_ID = T.TRIP_ID
GROUP BY Customer.First_Name
        ,Customer.Last_Name
        ,Trip.Trip_Name
        ,Trip.Type
        ,Reservation.Customer_Num
-- HAVING COUNT(Reservation.Customer_Num) > 1;

如果这不符合您的要求,请共享TRIP表和CUSTOMER表的完整结构。

尝试此操作,假定TRIP表使用CUSTOMER_num字段作为外键

select A.Customer_id, A.Name, A.Last_name, B.name, B.type from Customer as A
where Customer_id in 
    (select Customer_Num from Reservation group by Customer_Num having count(Customer_Num) > 1)
left join Trip as B on Trip.Customer_Num = Customer.Customer_Num
您可以使用EXISTS:


您需要调整行程表的ON子句,因为您没有指定表信息。

这将显示结果,以便我可以选择具有多个预订的名称。在预订表中,它列出了拥有多个预订的客户编号,但我不确定为什么它不起作用


选择CUSTOMER.FIRST\u NAME、CUSTOMER.LAST\u NAME、TRIP.TRIP\u NAME、TRIP.TYPE、RESERVATION.CUSTOMER\u NUM、COUNTRESERVATION.CUSTOMER\u NUM CUSTOMER\u NUM

预订

CUSTOMER.CUSTOMER\u NUM=RESERVATION.CUSTOMER\u NUM上的内部加入客户 预订时的内部连接行程。行程\u ID=行程。行程\u ID

按CUSTOMER.FIRST\u NAME、CUSTOMER.LAST\u NAME、TRIP.TRIP\u NAME、TRIP.TYPE、RESERVATION.CUSTOMER\u NUM分组 注释掉COUNTRESERVATION.CUSTOMER_NUM>1


请分享样本数据和预期结果。Hi@MTcodes和行程表在哪里?另外,是否向我们展示您迄今为止尝试过的代码?我添加了trip表以及其他两个表,只是为了澄清。使用了代码,但必须删除每个表名后的“C”“R”和“T”,而只使用完整的表名。它表示找不到数据选择CUSTOMER.FIRST\u NAME,CUSTOMER.LAST\u NAME,TRIP.TRIP\u NAME,TRIP.TYPE,RESERVATION.CUSTOMER\u NUM,COUNTRESERVATION.CUSTOMER\u NUM CUSTOMER\u NUM CUSTOMER\u NUM CNT从预订内部加入预订中的客户。CUSTOMER\u NUM=CUSTOMER.CUSTOMER\u NUM内部加入预订中的行程。TRIP\u ID=TRIP.TRIP\u ID按客户分组。FIRST\u NAME,CUSTOMER.LAST\u NAME、TRIP.TRIP\u NAME、TRIP.TYPE、RESERVATION.CUSTOMER\u NUM具有COUNTRESERVATION.CUSTOMER\u NUM>1;可能是HAVING condition正在筛选所有记录,因为在预订表中可能没有超过2个条目的客户。只需删除HAVING子句,然后重试。为了您的方便,我更新了查询以注释Having子句。谢谢您的帮助!!
SELECT t.*, c.*
FROM reservation r INNER JOIN
     customer c
     ON c.Customer_Num = r.Customer_Num INNER JOIN
     trip t
     ON . . .
WHERE EXISTS (SELECT 1 
              FROM reservation r1 
              WHERE r1.customer_no = r.customer_no AND 
                    r1.Reservation_ID <> r.Reservation_ID 
             );