gpt4 book ai didi

mysql - SQL Union All 别名来自第一个表?

转载 作者:行者123 更新时间:2023-11-29 21:14:30 24 4
gpt4 key购买 nike

我有两张 table

[数据] - 标题、制造商、零件编号、价格

[cross] - 产品(data.partnum)、标题、制造商、partnum、价格

我想要的是通过系统号列出所有产品。我怎样才能通过排序来联合所有数据 ->

  1. [数据表] Microsoft,“一些注释”,9989,20 美元
  2. [交叉表] Microsoft 经销商,“一些注释”,1045,30 美元
  3. [交叉表] Microsoft 的 Apple 经销商:),“一些注意事项”,2233,40 美元
  4. 虚拟间隔:)
  5. [数据表] Microsoft,“一些注释”,9989,10 美元
  6. [交叉表] Microsoft 的联想经销商..

我正在尝试这个

SELECT `title`,'Microsoft' AS `maker`,`partnum`,`price`
FROM data as d
WHERE sysn=%s
GROUP BY partnum
UNION ALL
SELECT `title`,`maker`,`partnum`,`price`
FROM cross as c
WHERE c.product=d.partnum
GROUP BY `partnum`

谢谢

最佳答案

目前还不完全清楚你在问什么。考虑在 http://sqlfiddle.com 中设置示例架构和数据.

实现“虚拟间隔”会非常困惑。这并非完全不可能,只是很困惑。

要按特定顺序返回行,您需要添加 ORDER BY 子句。

根本不清楚为什么要包含 GROUP BY 子句。第一个 SELECT 上的 GROUP BY 会有效地“折叠”示例输出行 1. 和 5.,给定 的相同值 9989零件号。如果没有解释为什么需要 GROUP BY,我猜测您真正想要的是 ORDER BY 子句。

也不清楚为什么文字值 'Microsoft' 需要出现在 SELECT 列表中,而不是 maker 列来自data 表。这样做在 SQL 方面没有任何无效的地方。但如果没有解释,那就没有多大意义。

我们应该问的问题...为什么需要这个特定结果?是否有更容易实现且同样满足要求的不同结果?

抛开“虚拟间隔”行,这样的查询的返回似乎满足了大部分规范:

SELECT t.src
, t.title
, t.maker
, t.partnum
, t.price
FROM (
SELECT '[data]' AS `src`
, d1.title AS `title`
, d1.maker AS `maker`
, d1.partnum AS `partnum`
, d1.price AS `price`
, d1.partnum AS `product`
FROM data d1
WHERE d1.sysn = ?

UNION ALL

SELECT '[cross]'
, c2.title
, c2.maker
, c2.partnum
, c2.price
, c2.product
FROM cross c2
JOIN data d2
ON d2.partnum = c2.product
WHERE d2.sysn = ?
)
ORDER BY t.product DESC, t.src DESC, t.price ASC

关于mysql - SQL Union All 别名来自第一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36073748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com