2014-04-26 138 views
0

我想知道如何正確地完成這個查詢。SQL - 如何查詢3個表(查詢中的查詢?)?

我希望導出用戶使用的所有ips的完整選票列表。


我的數據庫有3個表存儲親戚數據=>

票= vote_site_id | vote_ip | vote_time

connexions_ip = adresse_ip | user_id | connexion_time

users = user_id | user_name | user_ip


所以其實我有這個疑問讓所有connexions_ip從一個用戶=>

SELECT c.adresse_ip, c.user_id, u.user_name 
    FROM connexions_ip c 
    LEFT JOIN users u ON u.user_id = c.user_id 
WHERE u.user_id = '1' 

而且這個查詢將所有選票從一個用戶=>

SELECT v.vote_site_id, v.vote_ip, v.vote_time, u.user_name 
    FROM votes v 
    LEFT JOIN users u ON u.user_ip = v.vote_ip 
WHERE user_id = '1' 

我試着用子查詢,但我有這個錯誤「#1242 - 子查詢返回多於一行」

SELECT v.vote_site_id, v.vote_ip, v.vote_time, u.user_name 
    FROM votes v 
    LEFT JOIN users u ON (
SELECT c.adresse_ip 
    FROM connexions_ip c 
    LEFT JOIN users u ON u.user_id = c.user_id 
WHERE u.user_id = '1' 
) 
= v.vote_ip 
WHERE user_id = '1' 

感謝您的幫助。

+0

你嘗試過工會嗎? –

+0

聯盟可以完成我想要的? 當我嘗試UNION時,我沒有對一個用戶的différentsip的所有投票 – WolwX

+0

考慮提供合適的DDL(和/或sqlfiddle)與期望的結果集合 – Strawberry

回答

1

你可以參加所有的表

SELECT c.adresse_ip, c.user_id, u.user_name 
    , v.vote_site_id, v.vote_ip, v.vote_time 
FROM users u 
     LEFT JOIN connexions_ip c ON u.user_id = c.user_id 
     LEFT JOIN votes v ON u.user_ip = v.vote_ip 
WHERE u.user_id = '1' 

我選用表用戶爲基礎FROM因爲是符合條件的唯一表。

+0

這看起來不錯,我測試它 但實際上我被困在一個事實,即我們回到了我太多的時間相同的票=> 83.157.177.10 WolwX 83.157.177.10 \t 2014年2月16日14 :02:15 37.162.6.178 \t \t 1 WolwX \t \t 1 83.157.177.10 \t 2014年2月16日14時02分15秒 37.162.234.185 \t \t 1 WolwX \t \t 1 83.157.177。10 \t 2014年2月16日14時02分15秒 37.160.141.125 \t \t 1 WolwX \t \t 1 83.157.177.10 \t 2014年2月16日14時02分15秒 37.160.70.55 \t \t 1 WolwX \t \t 1 83.157。 177.10 \t 2014-02-16 14:02:15 – WolwX

+0

我用你的查詢:) 沒關係,據我測試實際,所以謝謝@Serpitron – WolwX

-1

試試這個:

select a.*,b.* from (SELECT c.adresse_ip, c.user_id, u.user_name 
    FROM connexions_ip c 
    LEFT JOIN users u ON u.user_id = c.user_id 
WHERE u.user_id = '1')a left join (SELECT u.user_id,v.vote_site_id, v.vote_ip, v.vote_time, u.user_name 
    FROM votes v 
    LEFT JOIN users u ON u.user_ip = v.vote_ip 
WHERE user_id = '1')b on a.user_id = b.user_id