Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL联合查询-多个表_Sql_Sql Server - Fatal编程技术网

SQL联合查询-多个表

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

我有两个表、项目和文档,它们都有一个ID和Name字段

我正在寻找满足以下要求的查询: -它将从任何一个表中返回在“Name”字段中有指定单词的行 -它将返回3个字段:ID、Name和TableName,其中TableName将是表的名称或某个标识符

我试过:

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%'

聪明又简单!非常感谢。我将标记为答案。精彩而简单!非常感谢。我会记下答案。