内连接3表

时间:2016-03-26 18:35:35

标签: mysql

我的数据库booking_system中有6个表。现在我想加入car_space,transaction和sport_facilities。但是,我遇到了问题。

当我分别使用这两个sql命令时,这些命令也可以运行,我可以得到我想要的结果。

-- car_space INNER JOIN transaction
SELECT * FROM car_space INNER JOIN transaction ON car_space.carSpaceId = transaction.carSpaceId ORDER BY transactionId;
-- sport_facilities INNER JOIN transaction
SELECT * FROM sport_facilities INNER JOIN transaction ON sport_facilities.sportFacilitiesId = transaction.sportFacilitiesId ORDER BY transactionId;

然后,我将它们组合成一个命令。

-- Combine But Not Work
SELECT * FROM transaction
INNER JOIN car_space ON transaction.carSpaceId = car_space.carSpaceId
INNER JOIN sport_facilities ON transaction.sportFacilitiesId = sport_facilities.sportFacilitiesId
ORDER BY transactionId;

虽然可以运行,但没有显示结果或记录。

我想做的是当我输入transactionId时,可以在数据库中找到记录表(car_space / sport_facilities)。 例如: 我输入WHERE transactionId = 1 可以从sport_facilities表而不是car_space搜索数据库。

谢谢。这是一些供参考的代码。

    -- Create a database
CREATE DATABASE booking_system;

-- Use This database
USE booking_system;

-- Create smartcart table
CREATE TABLE card(
    cardId  CHAR(8)     NOT NULL,
    PRIMARY KEY (cardId)
);

-- Insert some recond to card table
INSERT INTO card VALUES
    ('4332A0D5'),
    ('637ED500'),
    ('B3895A02'),
    ('E32F3702')
;

-- Create user table
CREATE TABLE user(
    userId      INT(5)          NOT NULL    AUTO_INCREMENT,
    cardNo      CHAR(8)         NOT NULL,
    firstName   VARCHAR(255)    NOT NULL,
    lastName    VARCHAR(255)    NOT NULL,
    sex         CHAR(1)         NOT NULL,
    dob         DATE            NOT NULL,
    hkid        CHAR(8)         NOT NULL,
    email       VARCHAR(255)    NOT NULL,
    telNo       INT(8)          NOT NULL,
    PRIMARY KEY (userId),
    FOREIGN KEY (cardNo) REFERENCES card (cardId) ON DELETE CASCADE,
    UNIQUE (hkid)
);

-- Alter user table
ALTER TABLE user AUTO_INCREMENT = 16001;

-- Insert some recond to user table
INSERT INTO user VALUES
    ('','4332A0D5','Andy','Ding','M','1962-04-20','K5216117','mkding@yahoo.com','98626229'),
    ('','637ED500','Emma','Dai','F','1972-06-15','D5060339','emmadai@yahoo.com.hk','62937453'),
    ('','B3895A02','Brinsley','Au','F','1984-02-24','P8172327','da224@live.hk','91961624'),
    ('','E32F3702','Eric','Fong','M','1990-04-15','Y1129323','ericfong0415@gmail.com','98428731')
;

-- Create car space price table
CREATE TABLE car_space_price(
    spaceNo             INT(2)      NOT NULL    AUTO_INCREMENT,
    price               INT(2)      NOT NULL,
    carSpaceDescription VARCHAR(16),
    CHECK (carSpaceDescription IN ('motorcycles','small vehicles','medium vehicles','large vehicles')),
    PRIMARY KEY (spaceNo)
);

-- Insert some recond to car space price table
INSERT INTO car_space_price VALUES
    ('','10','motorcycles'),        -- 1
    ('','10','motorcycles'),        -- 2
    ('','10','motorcycles'),        -- 3
    ('','10','motorcycles'),        -- 4
    ('','10','motorcycles'),        -- 5
    ('','20','small vehicles'),     -- 6
    ('','20','small vehicles'),     -- 7
    ('','20','small vehicles'),     -- 8
    ('','20','small vehicles'),     -- 9
    ('','20','small vehicles'),     -- 10
    ('','40','medium vehicles'),    -- 11
    ('','40','medium vehicles'),    -- 12
    ('','40','medium vehicles'),    -- 13
    ('','80','large vehicles'),     -- 14
    ('','80','large vehicles')      -- 15
;

-- Create car space table
CREATE TABLE car_space(
    carSpaceId  INT(5)      NOT NULL    AUTO_INCREMENT,
    spaceNo     INT(2)      NOT NULL,
    cardNo      VARCHAR(8)  NOT NULL,
    inTime      DATETIME,
    outTime     DATETIME,
    PRIMARY KEY (carSpaceId),
    FOREIGN KEY (spaceNo) REFERENCES car_space_price (spaceNo) ON DELETE CASCADE,
    FOREIGN KEY (cardNo) REFERENCES card (cardId) ON DELETE CASCADE
);

-- Insert some recond to car space table
INSERT INTO car_space VALUES
    ('','2','E32F3702','2015-02-23 14:24:18','2015-02-23 17:01:43'),    -- 1    --16004
    ('','6','B3895A02','2016-02-24 11:56:43','2016-02-25 09:21:08'),    -- 2    --16003
    ('','2','E32F3702','2016-02-24 16:42:34','2016-02-24 21:02:45'),    -- 3    --16004
    ('','2','E32F3702','2016-02-25 14:25:32','2016-02-25 17:03:54'),    -- 4    --16004
    ('','6','B3895A02','2016-02-25 17:12:11','2016-02-25 20:58:18'),    -- 5    --16003
    ('','13','637ED500','2016-02-25 19:17:03','2016-02-27 18:05:28'),   -- 6    --16002
    ('','6','B3895A02','2016-02-25 21:14:03','2016-02-25 23:53:28'),    -- 7    --16003
    ('','6','B3895A02','2016-02-26 08:46:23','2016-02-26 17:21:08'),    -- 8    --16003
    ('','2','E32F3702','2016-02-26 14:15:45','2016-02-26 21:01:15'),    -- 9    --16004
    ('','6','B3895A02','2016-02-27 09:42:13','2016-02-27 15:48:45'),    -- 10   --16003
    ('','2','E32F3702','2016-02-27 13:25:45','2016-02-27 15:15:45'),    -- 11   --16004
    ('','6','B3895A02','2016-02-28 10:57:16','2016-02-28 14:41:25'),    -- 12   --16003
    ('','2','E32F3702','2016-02-28 11:47:32','2016-02-28 13:43:15'),    -- 13   --16004
    ('','13','637ED500','2016-02-28 13:04:43','2016-03-02 22:39:46'),   -- 14   --16002
    ('','2','E32F3702','2016-02-28 14:42:34','2016-02-28 21:47:45'),    -- 15   --16004
    ('','6','B3895A02','2016-02-29 08:50:42','2016-02-29 14:28:42'),    -- 16   --16003
    ('','2','E32F3702','2016-02-29 12:12:35','2016-02-29 16:45:28'),    -- 17   --16004
    ('','6','B3895A02','2016-03-01 11:26:43','2016-03-01 14:56:26'),    -- 18   --16003
    ('','6','B3895A02','2016-03-03 13:45:26','2016-03-03 17:54:18')     -- 19   --16003
;

-- Create sport facilities price table
CREATE TABLE sport_facilities_price(
    sportNo             INT(2)      NOT NULL    AUTO_INCREMENT,
    sportType           VARCHAR(10) NOT NULL,
    price               INT(2)      NOT NULL,
    sportDescription    VARCHAR(20),
    PRIMARY KEY (sportNo)
);

-- Insert some recond to sport facilities price table
INSERT INTO sport_facilities_price VALUES
    ('','snooker','15','Snooker Room 1'),           -- 1
    ('','snooker','15','Snooker Room 2'),           -- 2
    ('','snooker','15','Snooker Room 3'),           -- 3
    ('','snooker','15','Snooker Room 4'),           -- 4
    ('','table_tennis','15','Table Tennis Room 1'), -- 5
    ('','table_tennis','15','Table Tennis Room 2'), -- 6
    ('','table_tennis','15','Table Tennis Room 3'), -- 7
    ('','table_tennis','15','Table Tennis Room 4'), -- 8
    ('','tennis','30','Tennis Vanue 1'),            -- 9
    ('','tennis','30','Tennis Vanue 2'),            -- 10
    ('','badminton','30','Badminton Vanue 1'),      -- 11
    ('','badminton','30','Badminton Vanue 2'),      -- 12
    ('','basketball','60','Hall')                   -- 13
;

-- Create sport facilities table
CREATE TABLE sport_facilities(
    sportFacilitiesId   INT(5)      NOT NULL    AUTO_INCREMENT,
    sportNo             INT(2)      NOT NULL,
    cardNo              VARCHAR(8)  NOT NULL,
    bookDate            DATE        NOT NULL,
    startTime           TIME        NOT NULL,
    endTime             TIME        NOT NULL,
    PRIMARY KEY (sportFacilitiesId),
    FOREIGN KEY (sportNo) REFERENCES sport_facilities_price (sportNo) ON DELETE CASCADE,
    FOREIGN KEY (cardNo) REFERENCES card (cardId) ON DELETE CASCADE
);

-- Insert some recond to sport facilities table
INSERT INTO sport_facilities VALUES
    ('','1','E32F3702','2015-02-23','12:00:00','14:00:00'),     -- 1    --16004
    ('','5','B3895A02','2016-02-23','14:00:00','15:00:00'),     -- 2    --16003
    ('','8','637ED500','2016-02-23','17:00:00','21:00:00'),     -- 3    --16002
    ('','2','E32F3702','2016-02-24','09:00:00','11:00:00'),     -- 4    --16004
    ('','5','4332A0D5','2016-02-24','13:00:00','14:00:00'),     -- 5    --16001
    ('','7','637ED500','2016-02-24','15:00:00','17:00:00'),     -- 6    --16002
    ('','8','B3895A02','2016-02-24','16:00:00','18:00:00'),     -- 7    --16003
    ('','10','4332A0D5','2016-02-25','09:00:00','10:00:00'),    -- 8    --16001
    ('','12','B3895A02','2016-02-25','13:00:00','14:00:00'),    -- 9    --16003
    ('','6','637ED500','2016-02-25','21:00:00','22:00:00'),     -- 10   --16002
    ('','4','637ED500','2016-02-26','11:00:00','13:00:00'),     -- 11   --16002
    ('','8','4332A0D5','2016-02-26','22:00:00','23:00:00'),     -- 12   --16001
    ('','13','B3895A02','2016-02-27','09:00:00','14:00:00'),    -- 13   --16003
    ('','4','637ED500','2016-02-28','12:00:00','14:00:00'),     -- 14   --16002
    ('','3','B3895A02','2016-02-28','14:00:00','15:00:00'),     -- 15   --16003
    ('','4','E32F3702','2016-02-28','17:00:00','19:00:00'),     -- 16   --16004
    ('','5','B3895A02','2016-02-28','21:00:00','22:00:00'),     -- 17   --16003
    ('','2','4332A0D5','2016-02-28','21:00:00','23:00:00'),     -- 18   --16001
    ('','10','E32F3702','2016-02-28','19:00:00','20:00:00'),    -- 19   --16004
    ('','11','B3895A02','2016-02-29','11:00:00','13::00:00'),   -- 20   --16003
    ('','8','E32F3702','2016-02-29','12:00:00','14:00:00'),     -- 21   --16004
    ('','4','4332A0D5','2016-02-29','15:00:00','18:00:00'),     -- 22   --16001
    ('','6','E32F3702','2016-03-01','09:00:00','11:00:00'),     -- 23   --16004
    ('','5','637ED500','2016-03-01','12:00:00','15:00:00'),     -- 24   --16002
    ('','3','B3895A02','2016-03-02','09:00:00','11:00:00'),     -- 25   --16003
    ('','7','4332A0D5','2016-03-02','12:00:00','13:00:00'),     -- 26   --16001
    ('','4','637ED500','2016-03-02','15:00:00','17:00:00'),     -- 27   --16002
    ('','1','E32F3702','2016-03-02','19:00:00','22:00:00'),     -- 28   --16004
    ('','12','4332A0D5','2016-03-03','11:00:00','13:00:00'),    -- 29   --16001
    ('','9','E32F3702','2016-03-03','15:00:00','16:00:00'),     -- 30   --16004
    ('','10','B3895A02','2016-03-03','09:00:00','11:00:00'),    -- 31   --16003
    ('','4','637ED500','2016-03-04','11:00:00','12:00:00'),     -- 32   --16002
    ('','8','E32F3702','2016-03-04','14:00:00','16:00:00'),     -- 33   --16004
    ('','6','B3895A02','2016-03-05','19:00:00','21:00:00'),     -- 34   --16003
    ('','13','E32F3702','2016-03-05','11:00:00','12:00:00'),    -- 35   --16004
    ('','8','637ED500','2016-03-05','14:00:00','15:00:00'),     -- 36   --16002
    ('','4','4332A0D5','2016-03-05','16:00:00','18:00:00'),     -- 37   --16001
    ('','5','E32F3702','2016-03-06','13:00:00','15:00:00'),     -- 38   --16004
    ('','9','B3895A02','2016-03-06','17:00:00','18:00:00'),     -- 39   --16003
    ('','11','4332A0D5','2016-03-07','20:00:00','21::00:00'),   -- 40   --16001
    ('','5','B3895A02','2016-03-07','22:00:00','23:00:00')      -- 41   --16003
;

-- Create transaction table
CREATE TABLE transaction(
    transactionId       INT(5)  UNSIGNED ZEROFILL   NOT NULL    AUTO_INCREMENT,
    userId              INT(5)  NOT NULL,
    carSpaceId          INT(5),
    sportFacilitiesId   INT(5),
    transactionDate     DATE    NOT NULL,
    PRIMARY KEY (transactionId),
    FOREIGN KEY (userId) REFERENCES user (userId) ON DELETE CASCADE,
    FOREIGN KEy (carSpaceId) REFERENCES car_space (carSpaceId) ON DELETE CASCADE,
    FOREIGN KEY (sportFacilitiesId) REFERENCES sport_facilities (sportFacilitiesId) ON DELETE CASCADE
);

-- Insert some recond to transaction table
INSERT INTO transaction VALUES
    ('','16004',NULL,'1','2015-02-23'),     -- 1    -- Sport Facilities
    ('','16003',NULL,'5','2015-02-23'),     -- 2    -- Sport Facilities
    ('','16004','2',NULL,'2015-02-23'),     -- 3    -- Car Space
    ('','16002',NULL,'8','2015-02-23'),     -- 4    -- Sport Facilities
    ('','16004',NULL,'2','2016-02-24'),     -- 5    -- Sport Facilities
    ('','16003','6',NULL,'2016-02-24'),     -- 6    -- Car Space
    ('','16001',NULL,'5','2016-02-24'),     -- 7    -- Sport Facilities
    ('','16002',NULL,'7','2016-02-24'),     -- 8    -- Sport Facilities
    ('','16003',NULL,'8','2016-02-24'),     -- 9    -- Sport Facilities
    ('','16004','2',NULL,'2016-02-24'),     -- 10   -- Car Space
    ('','16001',NULL,'10','2016-02-25'),    -- 11   -- Sport Facilities
    ('','16003',NULL,'12','2016-02-25'),    -- 12   -- Sport Facilities
    ('','16004','2',NULL,'2016-02-25'),     -- 13   -- Car Space
    ('','16003','6',NULL,'2016-02-25'),     -- 14   -- Car Space
    ('','16002','13',NULL,'2016-02-25'),    -- 15   -- Car Space
    ('','16002',NULL,'6','2016-02-25'),     -- 16   -- Sport Facilities
    ('','16003','6',NULL,'2016-02-25'),     -- 17   -- Car Space
    ('','16003','6',NULL,'2016-02-26'),     -- 18   -- Car Space
    ('','16002',NULL,'4','2016-02-26'),     -- 19   -- Sport Facilities
    ('','16004','2',NULL,'2016-02-26'),     -- 20   -- Car Space
    ('','16001',NULL,'8','2016-02-26'),     -- 21   -- Sport Facilities
    ('','16003',NULL,'13','2016-02-27'),    -- 22   -- Sport Facilities
    ('','16003','6',NULL,'2016-02-27'),     -- 23   -- Car Space
    ('','16004','2',NULL,'2016-02-27'),     -- 24   -- Car Space
    ('','16003','6',NULL,'2016-02-28'),     -- 25   -- Car Space
    ('','16004','2',NULL,'2016-02-28'),     -- 26   -- Car Space
    ('','16002',NULL,'4','2016-02-28'),     -- 27   -- Sport Facilities
    ('','16002','13',NULL,'2016-02-28'),    -- 28   -- Car Space
    ('','16003',NULL,'3','2016-02-28'),     -- 29   -- Sport Facilities
    ('','16004','2',NULL,'2016-02-28'),     -- 30   -- Car Space
    ('','16004',NULL,'4','2016-02-28'),     -- 31   -- Sport Facilities
    ('','16003',NULL,'5','2016-02-28'),     -- 32   -- Sport Facilities
    ('','16001',NULL,'2','2016-02-28'),     -- 33   -- Sport Facilities
    ('','16004',NULL,'10','2016-02-28'),    -- 34   -- Sport Facilities
    ('','16003','6',NULL,'2016-02-29'),     -- 35   -- Car Space
    ('','16003',NULL,'11','2016-02-29'),    -- 36   -- Sport Facilities
    ('','16004',NULL,'8','2016-02-29'),     -- 37   -- Sport Facilities
    ('','16004','2',NULL,'2016-02-29'),     -- 38   -- Car Space
    ('','16001',NULL,'4','2016-02-29'),     -- 39   -- Sport Facilities
    ('','16004',NULL,'6','2016-03-01'),     -- 40   -- Sport Facilities
    ('','16003','6',NULL,'2016-03-01'),     -- 41   -- Car Space
    ('','16002',NULL,'5','2016-03-01'),     -- 42   -- Sport Facilities
    ('','16003',NULL,'3','2016-03-02'),     -- 43   -- Sport Facilities
    ('','16001',NULL,'7','2016-03-02'),     -- 44   -- Sport Facilities
    ('','16002',NULL,'4','2016-03-02'),     -- 45   -- Sport Facilities
    ('','16004',NULL,'1','2016-03-02'),     -- 46   -- Sport Facilities
    ('','16001',NULL,'12','2016-03-03'),    -- 47   -- Sport Facilities
    ('','16003','6',NULL,'2016-03-03'),     -- 48   -- Car Space
    ('','16004',NULL,'9','2016-03-03'),     -- 49   -- Sport Facilities
    ('','16003',NULL,'10','2016-03-03'),    -- 50   -- Sport Facilities
    ('','16002',NULL,'4','2016-03-04'),     -- 51   -- Sport Facilities
    ('','16004',NULL,'8','2016-03-04'),     -- 52   -- Sport Facilities
    ('','16003',NULL,'6','2016-03-05'),     -- 53   -- Sport Facilities
    ('','16004',NULL,'13','2016-03-05'),    -- 54   -- Sport Facilities
    ('','16002',NULL,'8','2016-03-05'),     -- 55   -- Sport Facilities
    ('','16001',NULL,'4','2016-03-05'),     -- 56   -- Sport Facilities
    ('','16004',NULL,'5','2016-03-06'),     -- 57   -- Sport Facilities
    ('','16003',NULL,'9','2016-03-06'),     -- 58   -- Sport Facilities
    ('','16001',NULL,'11','2016-03-07'),    -- 59   -- Sport Facilities
    ('','16003',NULL,'5','2016-03-07')      -- 60   -- Sport Facilities
;

2 个答案:

答案 0 :(得分:0)

您希望如何组合行?

看起来所有引用车位的交易都有一个NULL体育设施参考,反之亦然。

查询是逐行完成的,当您将INNER JOIN事务处理到汽车空间时,您将获得带有汽车空间参考的所有交易记录以及汽车空间记录。所有其他交易都被过滤掉了。

由于这些过滤后的交易+车位空间行都没有运动设施参考(全部为空),因此当您将INNER JOIN添加到体育设施时,没有匹配的行,并且过滤掉不匹配的行。这会为您留下空的结果集。

要从双重INNER JOIN查询中获取任何结果,交易行必须引用(或链接)车位和体育设施。

如果您希望将所有交易行保留其车位或体育设施以及未引用的空出记录,您可以将INNER JOIN更改为LEFT JOIN(只需将INNER中的单词替换为LEFT)最终查询)。

答案 1 :(得分:0)

在这种情况下,我相信你会想要使用UNION运算符。您没有在两个表中匹配的事务ID,这就是您返回0行的原因。 LEFT / FULL加入也可能对您有用。

||