mySQL UNION将列添加到生成的查询结果中
所以我有这个疑问mySQL UNION将列添加到生成的查询结果中,mysql,Mysql,所以我有这个疑问 SELECT a.*, b.full_name as salesman from sales a LEFT JOIN user b ON a.salesman_id = b.id WHERE a.deleted_at IS NULL AND (a.status = '1' || a.status = '2' )
SELECT a.*, b.full_name as salesman
from sales a
LEFT JOIN user b ON a.salesman_id = b.id
WHERE a.deleted_at IS NULL AND (a.status = '1' || a.status = '2' )
AND a.balance <= 0
SELECT a.*, b.full_name as salesman from sales a
LEFT JOIN user b ON a.salesman_id = b.id
WHERE a.deleted_at IS NULL AND (a.status = '1' || a.status = '2' )
AND a.balance <= 0
UNION ALL
SELECT '','','','','','','','','','','','','','','','','','','','','','','','','','','',payment_amount from transaction
选择a.*,b.全名作为销售员
来自销售a
在a.id=b.id上左加入用户b
其中a.deleted_at为空且(a.status='1'| | a.status='2')
和a.balanceSQL查询结果中的所有行都具有相同的列名。使用UNION
时,列名取自UNION中第一个子查询的名称/别名。因此,在您的情况下,付款金额
将位于名为saller
的列中,因为这是第一个子查询中的对应列
SELECT a.*, b.full_name as salesman, 0 AS payment_amount
from sales a
LEFT JOIN user b ON a.salesman_id = b.id
WHERE a.deleted_at IS NULL AND (a.status = '1' || a.status = '2' )
AND a.balance <= 0
UNION ALL
SELECT '', '','','','','','','','','','','','','','','','','','','','','','','','','','','',payment_amount from transaction
如果您希望它位于自己的列中,您可以向第一个子查询添加一个额外的列0 AS payment\u amount
,并向第二个子查询添加一个额外的'
SELECT a.*, b.full_name as salesman, 0 AS payment_amount
from sales a
LEFT JOIN user b ON a.salesman_id = b.id
WHERE a.deleted_at IS NULL AND (a.status = '1' || a.status = '2' )
AND a.balance <= 0
UNION ALL
SELECT '', '','','','','','','','','','','','','','','','','','','','','','','','','','','',payment_amount from transaction
选择a.*,b.全名作为销售员,0作为付款金额
来自销售a
在a.id=b.id上左加入用户b
其中a.deleted_at为空且(a.status='1'| | a.status='2')
而a.balanceunion all只会将行添加到上一个查询的结果中。你到底有什么问题?。另外,如果您要在第二个查询中添加额外的列,您需要在第一个查询中添加虚拟列
SELECT a.*, b.full_name as salesman,"" as payment_amount from sales a
LEFT JOIN user b ON a.salesman_id = b.id
WHERE a.deleted_at IS NULL AND (a.status = '1' || a.status = '2' )
AND a.balance <= 0
UNION ALL
SELECT '','','',... till 28 times,payment_amount from transaction
选择a.*,b.全名为“销售人员”,“作为销售a的付款金额”
在a.id=b.id上左加入用户b
其中a.deleted_at为空且(a.status='1'| | a.status='2')
结果中的列名总是来自第一个查询。我想知道这是否真的运行。。因为UNION在这两个方面都需要相同的模式sides@MysticForceMySQL将在必要时将所有内容转换为字符串,以便将它们转换为相同的数据类型。@不同的列类型可能可以,但我认为列数必须匹配。但它至少需要相同的列数付款金额为空,先生,无数据确定。。那么你期待什么呢?向我们显示您想要的输出示例。如果我写入“从交易中选择付款金额”,则返回数据。我想从生成的查询中将这些数据添加到一个新列中,先生。如果您的列是number,那么您可以在第一个查询的所有字段中使用SUM()。在此之前,将null更改为零。您从SELECT payment_amount from transaction中获得多少行?所有付款金额现在变为0。第一次查询的所有行上都将显示0
付款金额,第二次查询的所有行上的非零支付金额。UNION
不会合并两次查询的结果,它们都有自己的行集。因此,基本上,我可以知道上面的查询用于什么目的吗,先生?您说过,额外的列与第一次查询中的数据无关。因此,这只是一种通过一个查询而不是两个查询来获得两组结果的方法。在循环结果时,检查第一列是否为空。如果它不是空的,则第一个查询中有一行,如果它是空的,则是第二个查询中的一行。