(MYSQL)SQL选择查询-可能是外部连接?
我正在努力使用一些sql,需要一些帮助。我相信这对很多人来说都是新手 以下是一个例子: 当提供相册ID时,我正在尝试选择相册中没有的所有图片 桌子 画表 相册图片关联表 相册表-我认为不需要在SQL中引用此表(MYSQL)SQL选择查询-可能是外部连接?,mysql,sql,select,Mysql,Sql,Select,我正在努力使用一些sql,需要一些帮助。我相信这对很多人来说都是新手 以下是一个例子: 当提供相册ID时,我正在尝试选择相册中没有的所有图片 桌子 画表 相册图片关联表 相册表-我认为不需要在SQL中引用此表 albumid albumname 我正在为相册分配图片,只想显示尚未分配的图片 额外积分:如果我可以选择表中的所有图片,并能够知道哪些图片已经在相册中,而不是从返回的数据中忽略它们,那就更好了。 然后我仍然可以显示图像,只是不允许分配它 希望一切都有意义。 谢谢你的帮助
albumid
albumname
我正在为相册分配图片,只想显示尚未分配的图片
额外积分:如果我可以选择表中的所有图片,并能够知道哪些图片已经在相册中,而不是从返回的数据中忽略它们,那就更好了。
然后我仍然可以显示图像,只是不允许分配它
希望一切都有意义。
谢谢你的帮助
使用MYSQL 5作为第一个问题,此查询将返回相册图片关联表中没有关联的图片
SELECT
*
FROM
pictures
WHERE
pictureid NOT IN (SELECT pictureid FROM album_picture)
返回二者的一个简单方法是添加另一列,执行两个查询,一个为指定的图片,另一个为未指定的图片,并获得两者的并集
(SELECT pictures.*, 'n' AS `assigned` .... ) UNION (SELECT pictures.*, 'y' AS `assigned` ...)
您可以在相册中找到不包含以下内容的图片:
select pictureid from Album_Picture where albumid != :albumid
select pictureid, albumid=:albumid as in_album from Album_Picture
您可以在相册中标记以下内容:
select pictureid from Album_Picture where albumid != :albumid
select pictureid, albumid=:albumid as in_album from Album_Picture
让我们通过尝试创建一个结果表来实现这一点,该表显示了每张图片及其关联的相册。由于左外连接,没有相册的图片的相册信息值为空。ORDERBY语句将把所有空值放在一起
select p.pictureid, p.picturename, a.albumid, a.albumname
from picture p
left outer join album_picture ap
on p.pictureid = ap.pictureid
left outer join album a
on ap.albumid = a.albumid
order by a.albumid
我以前从未见过这种语法。你有相关文档的链接吗?看起来很漂亮。这只是一些数据库连接器的语法;它通常比标准更具解释性?。PDO是这样做的:史蒂夫,虽然我用了不同的答案,但我认为你的第二个select语句是我真正想用的。我的问题相当复杂,因为这张图片/相册只是一个例子。所以我想不出如何适应你的建议。你能用现在的sql来调整它吗:从Daivd Z选择*从图片中选择图片ID不在从相册中选择图片ID图片我真的需要从图片保持不变谢谢David Z。我尝试了第一个,它成功了。它赢了;不返回任何已分配的。我不太明白你的第二个,但我现在很高兴。非常感谢。