2014-03-26 34 views
0
SELECT 
    c.cy_id AS cy_id, 
    (SELECT 
    c.to_id 
    FROM c 
    WHERE (c.to_id = se.ar))AS tsn, 
    (SELECT 
    se.x 
    FROM se 
    WHERE (c.to_id = se.ar)) AS X, 
    (SELECT 
    se.y 
    FROM se 
    WHERE (c.to_id = se.ar)) AS y 
FROM (c 
    JOIN se) 
WHERE (c.to_id = se.ar) 

這上面的查詢當我在mysql中執行給出的錯誤子查詢返回多個行。 但是,當我做下面的查詢它返回結果。mysql中的子查詢錯誤

SELECT 
    c.cy_id AS cy_id, 
    (SELECT DISTINCT 
    c.to_id 
    FROM c 
    WHERE (c.to_id = se.ar))AS tsn, 
    (SELECT 
    se.x 
    FROM se 
    WHERE (c.to_id = se.ar)) AS X, 
    (SELECT 
    se.y 
    FROM se 
    WHERE (c.to_id = se.ar)) AS y 
FROM (c 
    JOIN se) 
WHERE (c.to_id = se.ar). 

我需要一個這樣的理由。

+0

如果使用DISTINCT,查詢只返回不同的行,所以也許你第一個查詢返回兩行,這是相同的和DISTINCT查詢只返回一個結果是因爲兩個(或更多)結果全部相等。檢查你的第一個子查詢,看看有多少行返回。 – Sirac

+0

@Sirac:我的第一個查詢不返回任何row.it給出一個錯誤,說subquery返回多個行,但是當我運行第二個查詢使用DISTINCT它給了我78行。那麼區別是什麼呢。 – user3454116

+0

我的意思是你應該運行這個:'SELECT c.to_id FROM c WHERE(c.to_id = se.ar)'看看有多少行返回。如果有多行,則必須使用DISTINCT。要解決您的問題,而不使用DISTINCT,則必須將c.to_id列聲明爲主列或唯一列。 (因此檢查關鍵字PRIMARY和UNIQUE) – Sirac

回答

0

看來你的c表有多行,但它們都具有相同的to_id值。如果子查詢返回多個記錄,則會出現錯誤。

此外,您的查詢似乎不需要任何子查詢。試試這個,看看它是否得到你想要的結果:

SELECT 
    c.cy_id, 
    c.to_id AS tsn, 
    se.x AS X, 
    se.y AS y 
FROM c 
    JOIN se 
     ON c.to_id = se.ar 
+0

它工作正常,我得到所需的結果。 – user3454116

+0

我有兩個問題給我一個期望的結果,有沒有機會將它們合併爲一個。查詢低於: 第一個查詢低於: 選擇 c.cy_id, c.to_id AS TSN, se.x爲Tx, se.y AS TY 由C JOIN SE ON c.to_id = se.ar 工會選擇 c.cy_id, c.to_id AS TSN, swt.x爲Tx, swt.y如TY 從C上c.to_id = swt.ar 第二加入SWT 查詢是 SELECT c.cy_id, c.fr_id AS fsn, se.x A小號FX, se.y AS FY 由C JOIN SE ON c.fr_id = se.ar 我能加入這兩個查詢,並得到所有的列名的組合的結果。 – user3454116