2012-02-29 119 views
0

我有一個稱爲用戶和表的表稱爲事件。 每個用戶都是自己喜歡的「區號」。SQL如何從兩個表中選擇並匹配它們

每個事件都設置爲某個地區代碼,並將此信息保存在一個表:

events_areas: 
area_id BIGINT 
event_id BIGINT 

我想找到一個好辦法,讓用戶選擇是自己的區號?然後用選擇語句與事件區域代碼進行匹配。

我因子評分做同樣的events_areas做:users_areas:

area_id BIGINT 
user_id BIGINT 

但我不知道如何在SELECT語句中匹配他們...?

感謝

回答

-1
SELECT * 
    FROM users u 
     INNER JOIN users_areas ua 
      ON u.user_id = ua.user_id 
     INNER JOIN events_areas ea 
      ON ua.area_id = ea.area_id 
     INNER JOIN events e 
      ON ea.event_id = e.event_id 
+0

匿名downvoter會照顧解釋他們的反對嗎? – 2012-02-29 17:43:39

0

假設你列出的表,下面會選擇在選定的區域碼的用戶的所有事件。

SELECT u.*, e.* 
FROM users u 
JOIN users_areas ua 
    ON u.id = ua.user_id 
JOIN events_areas ea 
    ON ea.area_id = ua.area_id 
JOIN events e 
    ON ea.event_id = e.id 
0

select語句會是這個樣子:

SELECT DISTINCT users.*, events.* 
FROM users 
JOIN users_areas ON users.user_id = users_areas.user_id 
JOIN events_areas ON users_areas.area_id = event_areas.area_id 
JOIN events ON events_areas.event_id = events.event_id 
0

好吧,我改變了這種基於您的評論...

創建這些表:

Table: user 
id 
name 

Table: user_area 
id 
user_id 
area_id 

Table: event 
id 
name 

Table: event_area 
id 
event_id 
area_id 

Table: area 
id 
area_code 

然後運行此查詢:

SELECT event.name FROM event, event_area WHERE event.id = event_area.event_id AND event_area.area_id IN (SELECT area_id FROM user_area WHERE user_id = <CURRENTUSERSID>) 
+0

對不起,我試圖讓每個用戶選擇許多地區代碼,併爲事件相同...然後例如,如果事件得到區號:1,3,4和用戶得到的是代碼:3,5,8 - 它匹配 – Amir 2012-02-29 17:28:49

0

以簡單的英語開始列出表格(對象)之間的關係很有用。例如:

  1. 用戶屬於區號,區號有很多用戶。
  2. 一個事件發生在一個地區代碼和一個地區代碼有很多事件。

兩個語句描述許多一對多的關係,所以你需要這兩個表(有時稱爲交叉引用表)。

編寫這些語句總是有助於理解問題並提出相關問題。假設以上陳述是正確的,那麼使用這兩個表users_areasevents_areas也是正確的。要構建select說法,請注意,這裏只有一個兩個表有共同的列:area_id(其中的方式,將適合在int,使用bigint巨大矯枉過正,而且我認爲這同樣適用於user_idevent_id)。所以area_id是你需要用到的列匹配他們(正確的名詞是加入他們)。

這是你的SELECT語句:

SELECT ea.event_id, ea.area_id, ua.user_id 
FROM events_areas ea 
    INNER JOIN user_areas ua ON ea.area_id = ua.area_id 

或者,假設你也有一個event表和user表,這是有可能的情況下,我們擴大select看起來像這樣:

SELECT e.name, u.name 
FROM events_areas ea 
    INNER JOIN user_areas ua ON ea.area_id = ua.area_id 
    INNER JOIN users u ON u.user_id = ua.user_id 
    INNER JOIN events e ON e.event_id = ue.event_id 
+0

我明白了你對問題的理解,謝謝。而且你是對的,我會嘗試你的解決方案。謝謝! – Amir 2012-02-29 17:34:34

相關問題