mysql - 未正确加入

标签 mysql database join select

我有以下查询,它从一系列表中获取一堆列

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/

相关文章:

php - Ubuntu 12.04 上的 Apache2 : mysqlnd+mysqli and pdo_mysql - can i have both?

mysql - cs cart - 本地主机上的 mySQL 错误

PHP SQL 查询构建引擎

ruby-on-rails - 如何在不使用包含的情况下避免 n + 1?

Django ORM 连接无需外键且无需原始查询

php - 在连接中获取多行(codeigniter)

mysql - mysql数据连接问题

php - 如何使用通知程序减少数量

python - MS SQL通过Windows命令从python恢复数据库

php - 如何修复 PHP 中的 MySql 语法错误?