0

我需要有关 CONCAT 功能的帮助。我有两个选择查询,每个查询的结果都是一列。我需要将这两列合并为一。那可能吗?因为,即使我尝试使用简单的选择查询,例如:

SELECT owner FROM table WHERE number="value1";
SELECT number FROM table WHERE owner="value2" AND number IS NOT null;

这些查询工作并抛出 3 行,如结果。但是,如果我想使用 CONCAT 将它们合并到一列中 - 那是行不通的。你知道为什么吗?

SELECT CONCAT(SELECT owner FROM table WHERE number="value1",
SELECT number FROM table WHERE owner="value2" AND number IS NOT null
) as NEW_COLUMN FROM table;
4

3 回答 3

2

我想你想要这个:

SELECT CONCAT(owner, number) newCol1
FROM yourTable
WHERE number="value1"
    OR (owner="value2" AND number IS NOT null)
于 2012-08-23T14:09:09.740 回答
0
SELECT
   CONCAT(owner, number) as NEW_COLUMN
FROM
   table
WHERE
   owner = "value2"
   AND number = "value1"
   AND number IS NOT NULL
于 2012-08-23T14:08:42.447 回答
0

根本原因是数据库无法连接两个可能具有不同行数的不同 SELECT。

您需要做的是根据 JOIN 重新制定查询。

例如假设我们有这个表:

owner    number
John     value1
value2   123456

您的第一个查询:

SELECT owner FROM table WHERE number="value1";

将返回“约翰”。第二个

SELECT number FROM table WHERE owner="value2" AND number IS NOT null;

将返回“123456”。

如果你 CONCAT 这两个值,你会得到“John 123456”。

首先,这是您想要的查询的预期行为吗?如果第三行的所有者=Jack 和 number=value1,那么第一个查询返回两行“John”和“Jack”会发生什么情况?

您可以研究的一件事是CROSS JOIN语法。

SELECT CONCAT (table1.owner, ', ', table2.number) AS new_column
     FROM ( SELECT owner FROM table WHERE number="value1" ) AS tablel1
     CROSS JOIN
     (SELECT number FROM table WHERE owner="value2" AND number IS NOT null ) AS table2;

请注意,如果第一个查询返回三行,第二个查询返回四行,则组合查询将返回 3*4 = 12 行。

于 2012-08-23T14:13:00.830 回答