2012-04-20 57 views
0

我正在努力與一些SQL和可以使用一些幫助。我相信這對很多人來說都是新手。(MYSQL)SQL選擇查詢 - 可能是外部連接?

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

的表格

圖像表

pictureid 
    picturename 

Album_Picture關聯表

albumpictureid 
    albumid 
    pictureid 

專輯表 - 我不薄k該表需要在SQL中引用。

albumid 
    albumname 

我將照片分配給相冊,並且只想顯示尚未分配的照片。

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

希望大家都有道理。 謝謝你的幫助。

使用MYSQL 5

回答

1

關於第一個問題,這個查詢將返回你那裏有沒有你的album_picture關聯表內的關聯的圖片。

SELECT 
    * 
    FROM 
    pictures 
    WHERE 
    pictureid NOT IN (SELECT pictureid FROM album_picture) 

返回兩者的一個簡單的方法是添加另一個列,執行兩個查詢(一個給你指定的圖片和一個給你未分配的圖片),並獲得二者的結合。試圖通過

select pictureid, albumid=:albumid as in_album from Album_Picture 
+0

謝謝大衛Z.我嘗試了第一個,它的工作。它贏了;返回任何已經分配的。我真的不明白你的第二個,但我現在很高興。謝謝! – gbroke 2012-04-20 03:39:17

1

您可以用專輯找到圖片

select pictureid from Album_Picture where albumid != :albumid 

您可以用專輯紀念那些創建一個顯示每張圖片及其相關專輯的結果表格。由於左外連接,沒有相冊的圖片將具有相冊信息的空值。 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 
+0

我以前沒有看過這種語法。你有鏈接到它的一些文件?看起來非常漂亮。 – 2012-04-20 03:20:20

+0

這只是一些數據庫連接器的語法;它通常比標準更具說明性? PDO這樣做:http://php.net/manual/en/pdo.prepared-statements.php – 2012-04-20 03:21:18

+0

啊非常酷,我會看看它:) – 2012-04-20 03:26:24

0

讓我們的做法是:

(SELECT pictures.*, 'n' AS `assigned` ....) UNION (SELECT pictures.*, 'y' AS `assigned` ...)