2010-04-07 71 views
1

表結構JOIN是這樣的:MySQL查詢在同一個表

表:買方列:ID |組織|城市|狀態

表:事件列:id | purchaser_id

我的查詢:

SELECT purchasers.*, events.id AS event_id 
FROM purchasers 
INNER JOIN events ON events.purchaser_id = purchasers.id 
WHERE purchasers.id = '$id' 

我想這樣做,顯然是選擇從採購表其ID的條目,並從事件參與。這是很容易的部分。我也可以很容易地通過另一個查詢來獲得具有相同組織,城市和州的其他購買者(有多個),但我想在同一個查詢中完成所有操作。有什麼辦法可以做到這一點?

簡而言之,通過他們的ID獲取購買者,但也選擇具有相同組織,城市和州的其他購買者。

謝謝。

回答

2

你可以嘗試像

SELECT p.*, 
     e.id 
FROM purchasers p INNER JOIN 
     events e ON e.purchaser_id = p.id INNER JOIN 
     (
      SELECT p.* 
      FROM purchasers p 
      WHERE p.id = '$id' 
     ) Original ON p.organization = Original.organization 
        AND p.city = Original.city 
        AND p.state = Original.state 

子選擇原始將返回原來的購買者,然後表通過組織,城市和國家

編輯鏈接到買家:

更改了查詢,這仍然會返回重複項目,但僅限於每個購買者註冊的事件數量。如果你想購買檢索的DISTINCT列表中,你不能與事件ID做到這一點,所以你需要像

SELECT p.* 
FROM purchasers p INNER JOIN 
     (
      SELECT p.* 
      FROM purchasers p 
      WHERE p.id = '$id' 
     ) Original ON p.organization = Original.organization 
        AND p.city = Original.city 
        AND p.state = Original.state 
+0

@astander這是非常令人印象深刻的SQL!感謝您的幫助。根據我測試的記錄,有兩個事件與其中一個購買者相關聯,然後是另外兩個具有相同名稱,城市和州的重複購買者(我希望能夠合併購買者)。您的示例返回同一購買者4次(每個事件2個結果)。思考? – jay 2010-04-07 03:59:32

+0

你只是在尋找不同的pruchasers列表,沒有事件? – 2010-04-07 04:03:45

+0

我正在尋找a)已被稱爲ID的購買者b)查看哪些事件與其相關聯以及c)具有相同組織,城市,州的其他購買者。最後,我還需要檢查並確定那些其他重複購買者是否也有附加任何事件。 – jay 2010-04-07 04:13:45