SQL联合查询-多个表
我有两个表、项目和文档,它们都有一个ID和Name字段 我正在寻找满足以下要求的查询: -它将从任何一个表中返回在“Name”字段中有指定单词的行 -它将返回3个字段:ID、Name和TableName,其中TableName将是表的名称或某个标识符 我试过:SQL联合查询-多个表,sql,sql-server,Sql,Sql Server,我有两个表、项目和文档,它们都有一个ID和Name字段 我正在寻找满足以下要求的查询: -它将从任何一个表中返回在“Name”字段中有指定单词的行 -它将返回3个字段:ID、Name和TableName,其中TableName将是表的名称或某个标识符 我试过: SELECT id, name FROM projects UNION SELECT id, name FROM documents WHERE name like '%querystriong%' 但此查询不添加第三个TableNa
SELECT id, name
FROM projects UNION SELECT id, name FROM documents
WHERE name like '%querystriong%'
但此查询不添加第三个TableName字段,它将从项目表中返回在name字段中具有与querystring关联的文档的行
我怀疑我处理这件事完全错了。有什么想法吗?你是说:
SELECT id, name, 'projects' AS table_name
FROM projects WHERE name like '%querystriong%' UNION SELECT id, name, 'documents' AS table_name
FROM documents WHERE name like '%querystriong%'
你的意思是这样的:
SELECT id, name, 'projects' AS table_name
FROM projects WHERE name like '%querystriong%' UNION SELECT id, name, 'documents' AS table_name
FROM documents WHERE name like '%querystriong%'
将联合中的每个select视为其结果集列必须匹配的谨慎查询。这意味着,如果要对每个查询进行筛选,则每个查询也必须具有WHERE子句。此外,您可以向每个查询添加一个文本,以说明它来自何处 这意味着您的查询应该类似于:
SELECT id, name 'projects' AS TableName FROM projects WHERE name like '%querystring%'
UNION
SELECT id, name, 'documents' AS TableName FROM documents WHERE name like '%querystring%'
或者,您可以将其表示为:
SELECT id, name, tablename FROM (
SELECT id, name, 'projects' as tablename
UNION
SELECT id, name, 'documents' as tablename
) AS combinedtable WHERE name like '%querystring%'
第二个选项可以让您更好地控制WHERE子句,因为您不需要复制它。将联合中的每个select看作是一个谨慎的查询,其结果集列必须匹配。这意味着,如果要对每个查询进行筛选,则每个查询也必须具有WHERE子句。此外,您可以向每个查询添加一个文本,以说明它来自何处 这意味着您的查询应该类似于:
SELECT id, name 'projects' AS TableName FROM projects WHERE name like '%querystring%'
UNION
SELECT id, name, 'documents' AS TableName FROM documents WHERE name like '%querystring%'
或者,您可以将其表示为:
SELECT id, name, tablename FROM (
SELECT id, name, 'projects' as tablename
UNION
SELECT id, name, 'documents' as tablename
) AS combinedtable WHERE name like '%querystring%'
第二个选项可以让您更好地控制WHERE子句,因为您不需要复制它。我不确定是否正确理解该问题,但此查询可能有助于:
SELECT id, name, 'projects' as tablename
FROM projects
WHERE name like '%querysting%'
UNION
SELECT id, name, 'documents'
FROM documents
WHERE name like '%querystring%'
我不确定我是否正确理解了问题,但此查询可能有助于:
SELECT id, name, 'projects' as tablename
FROM projects
WHERE name like '%querysting%'
UNION
SELECT id, name, 'documents'
FROM documents
WHERE name like '%querystring%'
聪明又简单!非常感谢。我将标记为答案。精彩而简单!非常感谢。我会记下答案。