我有一个与两个以上(Ticket,Guest,Sponsor)表有一对多关系的事件表。它们与具有外键约束的事件表相关。 现在当我使用左连接使用(EVENT_ID)时,我会多次重复记录,直到达到其他表记录的最大表结果集行
是他们从其他表中获取这些记录的方法。 这是我的表格,我只在这个例子中展示了与我的问题相关的列,用于空间和简洁
CREATE TABLE event(
EVENT_ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
) ;
CREATE TABLE eventSponsor (
SPONSOR_ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
EVENT_ID INTEGER NOT NULL,
name VARCHAR(50) NOT NULL,
FOREIGN KEY fk_key(EVENT_ID)
REFERENCES event(EVENT_ID)
ON UPDATE CASCADE
ON DELETE CASCADE
)ENGINE=InnoDB;
CREATE TABLE eventGuest(
GUEST_ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(30) NOT NULL,
EVENT_ID INTEGER NOT NULL,
FOREIGN KEY fk_guest(EVENT_ID)
REFERENCES event(EVENT_ID)
ON UPDATE CASCADE
ON DELETE CASCADE
)ENGINE=InnoDB;
CREATE TABLE eventTicket(
TICKET_ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
EVENT_ID INTEGER NOT NULL,
name VARCHAR(20) NOT NULL,
FOREIGN KEY fk_ticket(EVENT_ID)
REFERENCES event(EVENT_ID)
ON UPDATE CASCADE
ON DELETE CASCADE
)ENGINE=InnoDB;
这是我的加入
SELECT `event`.`EVENT_ID`, `event`.`name` AS `eventName`, `eventGuest`.`GUEST_ID` `eventGuest`.`first_name` AS 'guestName',`eventSponsor`.`SPONSOR_ID`, `eventSponsor`.`name` AS 'sponsorName', `eventTicket`.`TICKET_ID`, `eventTicket`.`name` AS 'ticketName'
FROM `event`
RIGHT JOIN `eventTicket` USING(`EVENT_ID`)
LEFT JOIN `eventGuest` USING(`EVENT_ID`)
LEFT JOIN `eventSponsor` USING(`EVENT_ID`)
WHERE `event`.`EVENT_ID` = in_eventId;
我得到
的结果EVENT_ID |eventName | GUEST_ID | guestName | SPONSOR_ID | sponsorName | TICKET_ID | ticketName
1 | event1 | 1 | guest1 | 1 | sponsor1 | 1 | ticket1 |
1 | event1 | 2 | guest2 | 2 | sponsor2 | 2 | ticket2 |
1 | event1 | 1 | guest1 | 3 | sponsor3 | 3 | ticket3 |
1 | event1 | 2 | guest2 | 1 | sponsor1 | 4 | ticket4 |
看,因为有4个与该事件相关的门票,但只有2个客人和3个赞助商他们的记录重复,直到他们与门票行相同但是。 我想要的是得到这样的东西
EVENT_ID |eventName | GUEST_ID | guestName | SPONSOR_ID | sponsorName | TICKET_ID | ticketName
1 | event1 | 1 | guest1 | 1 | sponsor1 | 1 | ticket1 |
1 | event1 | 2 | guest2 | 2 | sponsor2 | 2 | ticket2 |
1 | event1 | null | null | 3 | sponsor3 | 3 | ticket3 |
1 | event1 | null | null | null | null | 4 | ticket4 |
是否可以将我的联接变为twick并获得此结果,或者是默认值。如果这是你建议的解决方法。仅供我在存储过程中编写此SQL。 提前谢谢你。