2010-09-13 131 views
1

所以我想做一個有點複雜的查詢,並遇到麻煩。因爲它似乎是最合乎邏輯的我有這樣的結構吧:需要幫助與MySQL查詢

SELECT (intake.id, s_matters.id, s_calls.cid, s_events.id) AS id, 
     (intake.name, s_matters.casename, s_calls.name, s_events.subject) AS title 
FROM intake, s_matters, s_calls, s_events 
WHERE title LIKE '%mi%' 

返回:

錯誤代碼:1241
操作數應包含1列(S)

所以我知道它與支架結構有關,但我不知道如何正確地做到這一點。

+0

有一個'title'列在所有的四個表的?如果不是,哪個表是從哪裏來的?但是您的查詢也是笛卡爾產品 - 您需要加入條件 – 2010-09-13 19:46:20

+1

您能否提供您想要的輸出示例? – 2010-09-13 19:52:02

+0

來自以下的回覆:我試圖將來自不同表格的所有ID合併成一個標題爲「id」的列,並將另一列標題爲「title」的所有名稱聯合起來,其中結果將在「標題「欄。這實際上只是第一步,我還需要一個具有行來自表名的列,所以我知道每行中的數據類型。 – Evan4623 2010-09-13 20:32:50

回答

0

我覺得需要什麼樣的最好辦法是下面的返回:

SELECT id, name title, 'intake' table 
FROM intake WHERE name LIKE '%mi%' 
UNION ALL 
SELECT id, casename title, 's_matters' table 
FROM s_matters WHERE casename LIKE '%mi%' 
UNION ALL 
SELECT cid AS id, name title, 's_calls' table 
FROM s_calls WHERE name LIKE '%mi%' 
UNION ALL 
SELECT id, subject title, 's_events' table 
FROM s_events WHERE subject LIKE '%mi%' 
+0

錯誤代碼:1064 您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到在表 附近使用的正確語法。使用WHERE name LIKE'%mi%' UNION ALL SELECT 1,casename tit'at line 1 – Evan4623 2010-09-14 16:05:20

+0

其實這是完美的,它只是不喜歡名爲「表」的虛擬列...更改爲「類型」,它工作正常。謝謝! – Evan4623 2010-09-14 16:16:43

4

別名只能引用一列。如果別名是爲每個列表中的最後一列,這樣做:

SELECT intake.id, s_matters.id, s_calls.cid, s_events.id AS id, intake.name, 
    s_matters.casename, s_calls.name, s_events.subject AS title 
FROM intake, s_matters, s_calls, s_events 
WHERE title LIKE '%mi%' 

而且,你缺少從您加入ON條款。試圖完成什麼查詢?

2

目前還不清楚是什麼你正在嘗試做的

SELECT CONCAT(intake.id,s_matters.id,s_calls.cid,s_events.id)爲ID,CONCAT(intake.name,s_matters.casename ,s_calls.name,s_events.subject)AS標題從進口,s_matters,s_calls,s_events在哪裏標題喜歡'%mi%

可能是你的意圖。正如redfilter指出你的連接缺少ON子句。

+0

我試圖將來自不同表格的所有ID合併到一個標題爲「id」的列中,並將另一列標題爲「title」的所有名稱連接在一起,其中結果在「標題」列中有「mi」。 – Evan4623 2010-09-13 20:31:03

+0

嘗試concat()函數,它將字符串連接成一個字符串,然後可以將其作爲單個字段引用。您將需要指定表格應該如何連接。例如where intake.id = s_matters.id等 – Jaydee 2010-09-14 08:47:35