簡體   English   中英

(MYSQL)SQL選擇查詢 - 也許是OUTER JOIN?

[英](MYSQL) SQL select query - maybe OUTER JOIN?

我正在努力與一些SQL,並可以使用一些幫助。 我相信這對很多人來說都是新手。

這是一個例子:當我提供albumid時,我試圖選擇所有不在相冊中的圖片。

表格

圖片表

    pictureid
    picturename

Album_Picture關聯表

    albumpictureid
    albumid
    pictureid

專輯表 - 我不認為這個表需要在SQL中引用。

    albumid
    albumname

我正在為相冊分配圖片,並且只想顯示尚未分配的圖片。

額外的功勞:如果我可以選擇表格中的所有圖片並且能夠知道相冊中已有哪些圖片,而不是從返回的數據中省略它們,那將會更好。 然后我仍然可以顯示圖像,只是不允許它被分配。

希望一切都有道理。 感謝您的任何幫助。

使用MYSQL 5

對於您的第一個問題,此查詢將返回您的album_picture關聯表中沒有關聯的圖片。

  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 

讓我們通過嘗試創建一個顯示每張圖片及其相關相冊的結果表來解決這個問題。 由於左外連接,沒有相冊的圖片將具有相冊信息的空值。 ORDER BY語句將所有空值放在一起。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM