我有以下查询,它从一系列表中获取一堆列
SELECT Events.eventID, Events.eventName, Organisations.organisationName, Events.eventCrewSize, Events.eventGuestSize, Events.eventDate, Events.eventTime, Boat.boatName, Address.addressNo, Address.addressStreet, Address.addressStreetType, Address.addressSuburb, Address.addressPostCode, Address.addressState
FROM Events, Organisations, Boat, Address
WHERE Events.eventOrganisation = Organisations.organisationID AND Events.eventBoatID = Boat.boatID AND Events.eventAddressID = Address.addressID AND Events.eventDate >= CURDATE();
我的问题是,并非所有事件都有组织,并且该列不会返回 NULL,而是不包含任何没有组织的事件。
我尝试从 where 子句中删除包含空行的组织部分,但它使用另一个事件的组织作为其值,而不是实际的空值。
我认为这是一个联接问题,但不确定如何相应地构建它。
最佳答案
您可以尝试使用左连接
SELECT Events.eventID, Events.eventName, Organisations.organisationName, Events.eventCrewSize, Events.eventGuestSize, Events.eventDate, Events.eventTime, Boat.boatName, Address.addressNo, Address.addressStreet, Address.addressStreetType, Address.addressSuburb, Address.addressPostCode, Address.addressState
FROM Events
LEFT JOIN Organisations on Events.eventOrganisation = Organisations.organisationID
LEFT JOIN Boat on Events.eventBoatID = Boat.boatID
LEFT JOIN Address on Events.eventAddressID = Address.addressID
WHERE Events.eventDate >= CURDATE();
不要忘记应用主键和外键/规范化之间的关系。您可以使用 NULLIF()
来避免空值
关于mysql - 未正确加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53455369/