2015-06-08 113 views
0

我有兩個表都帶有名爲member_id的列。我想選擇所有member_ids ...有兩個條件的MySQL JOIN聲明

  1. WHERE end_date <= NOW()從表1和
  2. approved='n'從表2

我很熟悉JOIN,但我相信這是這裏需要什麼。這樣的東西似乎並沒有工作,雖然...

SELECT both.member_id, both.course_id 
FROM vbc_status 
INNER JOIN course_enrollment ON both.member_id=both.member_id AND 
           both.end_date <= NOW() AND 
           both.approved='n' 

我該如何做到這一點?

+0

是'both'表?你需要加入它。 – dan08

+0

http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ – Mihai

+0

vbc_status和course_enrollment有什麼關係? – Tommassiov

回答

1

即使在加入之後,您仍然必須通過其來源引用原始列。我不確定哪張桌子有course_id,所以你必須在它運行之前修復那個桌子。

SELECT vbc_status.member_id, ?.course_id 
FROM vbc_status INNER JOIN course_enrollment 
    ON vbc_status.member_id = course_enrollment.member_id 
     AND vbc_status.end_date <= NOW() AND course_enrollment.approved = 'n' 

你可能會發現表別名是方便的。

+0

這很好。謝謝! – gtilflm

0
SELECT t1.member_id, t1.course_id FROM vbc_status t1 
    JOIN course_enrollment ce USING(member_id) 
    WHERE t1.end_date <= NOW() AND ce.approved='n' 

我認爲end_date是vbc_status的一列,並且批准的是course_enrollment的一列。

語句說明: 您使用vbc_status t1設置表別名,這將使t1成爲表vbc_status的別名,並且course_enrollment獲取別名ce。 然後在選擇你必須在你想看到的字段的前綴和表的別名前加上where命令。

1

我想你想要這樣的:

SELECT * 
FROM vbc_status v 
INNER JOIN course_enrollment c ON v.member_id = c.member_id 
WHERE v.end_date <= NOW() AND c.approved='n' 
+0

當我跑這個時,我得到了'#1054 - 'where子句' – gtilflm

+0

@gtilflm中的未知列'v.approved',只是刪除那些你看到這個錯誤的謂詞。你沒有提供表結構,所以我們不知道哪一列來自哪個表。 –

+0

「謂詞」?我不確定這些是什麼。至於桌子,對不起。 'approved'在'course_enrollment'中,'end_date'在'vbc_status'中。 – gtilflm