2010-09-13 138 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