2013-10-16 70 views
1

我有一個用戶表,一個作業表和一個文件表;確切的表名是user_table,jobsfiles如何連接或左連接三個表以從其中一個表中獲取數據?

文件表和作業表具有一個公共字段,而作業表和用戶表具有公共字段,但所有3個都沒有公共字段。所以文件表有jobid,它等於id from jobs表,而作業表有userid,它等於userid from users表。

示例記錄

files table 

id name  path    jobid 
------------------------------------------- 
7  test.gif uploads/test.gif 130 

jobs table 

id  userid ponumber date 
------------------------------------------------ 
130 1013  2322  10/14/2013 2:55:1pm 

user_table table 

userid username email    fname sname 
------------------------------------------------------- 
1013  username [email protected] first last 

文件7屬於就業130和作業130屬於用戶1013這樣一個頁面上顯示的文件時,我想也顯示該文件的擁有者,但兩家桌子。

我該怎麼做?我沒有嘗試過任何東西,因爲我是MySQL編程的新手。如果我嘗試和猜測的東西,它可能會去是這樣的:

SELECT * 
FROM user_table u 
INNER JOIN jobs j USING (userid) 
LEFT JOIN files f ON j.id = f.jobid 

這可能是這樣的胡亂猜測,它甚至沒有值得一提的。

+0

這是什麼結束了工作。不知道我選擇正確的答案是正確的。我可能應該提到,即使我從多個表中選擇了多個列,也需要根據文件表中的一條記錄取回一行。 SELECT files。*,jobs。*,user_table。* FROM files LEFT JOIN作業ON files.jobid = jobs.id LEFT JOIN user_table ON jobs.userid = user_table.userid WHERE files.id = $ id – leoarce

回答

3

好了,如果所有用戶都有作業和所有作業所擁有的文件或者你想只顯示用戶有文件,然後

SELECT * 
FROM user_table u 
INNER JOIN jobs j ON j.id=u.userID 
INNER JOIN files f ON j.id = f.jobid 

會做的作業。

如果所有用戶不要有作業和所有作業切勿有文件或要顯示所有用戶,無論他們是否有工作用的文件或不那麼

SELECT * 
FROM user_table AS u 
LEFT JOIN jobs AS j ON j.id=u.userID 
LEFT JOIN files AS f ON j.id = f.jobid 

會去做。

HERE描述的連接可能會幫助您更好地理解連接。

1
SELECT user_table.username, files.* 
FROM files 
INNER JOIN jobs ON files.jobid = jobs.id 
INNER JOIN user_table ON jobs.userid = user_table.userid 
1
SELECT files.id, files.name, jobs.id, user_table.username 
FROM files LEFT JOIN jobs 
ON files.id = jobs.id LEFT JOIN user_table 
ON jobs.userid = user_table.userid