【发布时间】:2012-03-28 11:36:09
【问题描述】:
我基本上遇到了和这里完全相同的问题:
SQL View: Join tables without causing the data to duplicate on every row?
除了那个问题,他使用的是 SQL,而我使用的是 mysql。我想知道在 mysql 中是否可以进行相同的查询。如果是这样,我可能有错误的语法?
我正在尝试做类似的事情
select a.name as account_Name,
p.description as property_DESCRIPTION,
p.address as property_ADDRESS,
null as vehicles_DESCRIPTION,
null as vehicles_MAKE,
null as vehicles_MODEL
from Accounts a
inner join Properties p
on a.accountid = p.accountid
UNION ALL
select a.name as account_Name,
null as property_DESCRIPTION,
null as property_ADDRESS,
v.description as vehicles_DESCRIPTION,
v.make as vehicles_MAKE,
v.model as vehicles_MODEL
from Accounts a
inner join vehicles v
on a.accountid = v.accountid
这是我的实际代码:
SELECT user.first_name, user.last_name, upi.image_id, NULL AS friends.friend_user_id FROM user
INNER JOIN user_profile_images as upi ON (user.user_id = upi.user_id)
UNION
SELECT user.first_name, user.last_name, NULL AS upi.image_id, friends.friend_user_id FROM user
INNER JOIN friends ON (user.user_id = friends.user_id)
WHERE user.user_id = '$profile_id'
我有 3 个表:user、user_profile_images 和 friends。 user_profile_images 和好友都通过 user_id 与用户相关联。因此,用户可以拥有多个个人资料图像以及多个朋友条目。如果没有意义,我可以发布表格图。但我想要的基本上是所有信息的视图,如果它们不适用于整体视图,则字段为 NULL。
如果我使用 2 个表进行查询,或者使用 user 和 user_profile_images,或者使用 user 和 friends,我会得到想要的结果,但是添加第三个表会给我重复的行。
【问题讨论】:
-
SQL 是一种语言,其中 MySQL 是一种特定的实现。没有什么是“只是 SQL”。当您执行
union all时,您会强制 mysql 从联合查询中返回所有行。删除all关键字,mysql为你消除重复行。 -
另请阅读左/右连接,因为它们有时可能是更好的解决方案。
-
您的“实际代码”可能会出错,因为每个表中的列数不同 - 第二个
SELECT有一个upi.image_id,但第一个没有。 -
我的错误,我复制了一段错误的代码,再次更新了我仍然无法开始工作的代码......
-
您的错误消息显然是 PHP 错误消息(“mysqli_num_rows() 需要参数 1 ...”) - 您可以直接从 MySQL 提示符进行查询(这样我们就可以解决 MySQL 问题在讨论 PHP 问题之前),或者至少发布您用于查询数据库的 PHP 代码,包括错误来自的行。此外,在您用于执行查询的行中,您能否执行
$con->query('...') or die($con->error)(或mysqli_query(...) or die(mysqli_error(...))),以便我们可以确定错误是在 MySQL 中还是在 PHP 中,以及 究竟是什么 错误是。
标签: mysql join duplicates union