【发布时间】:2020-08-23 14:51:38
【问题描述】:
我正在尝试获取两个连接结果将被联合并按几列排序的表。我发现在每个联合选择中都必须提到排序的列。但我不希望有序列出现在结果中。可能吗?也许还有其他方法可以获得我想要的结果。
这是我的查询:
SELECT coupon_id,
coupon_name,
real_price,
discount_price,
difference_percent,
discount_percent,
payment_price,
photo,
company_id,
company_name
FROM
(SELECT cpn.id AS coupon_id,
cpn.name_ru AS coupon_name,
cpn.real_price,
cpn.discount_price,
cpn.difference_percent,
cpn.discount_percent,
cpn.payment_price,
cp.photo,
com.id company_id,
com.name_ru AS company_name
FROM coupon cpn
LEFT JOIN coupon_photo cp ON cpn.id = cp.coupon_id
LEFT JOIN company com ON cpn.company_id = com.id
WHERE cpn.id NOT IN
(SELECT coupon_id AS id
FROM transaction
WHERE Date_add(created_time, interval 10 MINUTE) > Now()
AND status = 'pending')
AND cpn.exp_date > Now()
AND cpn.valid_date > Now()
AND cpn.available > 0
UNION SELECT cpn.id AS coupon_id,
cpn.name_ru AS coupon_name,
cpn.real_price,
cpn.discount_price,
cpn.difference_percent,
cpn.discount_percent,
cpn.payment_price,
cp.photo,
com.id company_id,
com.name_ru AS company_name
FROM coupon cpn
LEFT JOIN coupon_photo cp ON cpn.id = cp.coupon_id
LEFT JOIN company com ON cpn.company_id = com.id
LEFT JOIN transaction trans ON cpn.id = trans.coupon_id
WHERE cpn.exp_date > Now()
AND cpn.valid_date > Now()
AND Date_add(trans.created_time, interval 10 MINUTE) > NOW()
AND trans.status = 'pending'
AND (cpn.available - trans.amount) > 0 GROUP BY cpn.id) results
ORDER BY cpn.advertised DESC,
cpn.sold DESC,
cpn.views DESC
【问题讨论】:
-
您自己尝试解决什么问题(简单的问题!)?
-
我已经查看了所有与这个问题相似的问题。我尝试分别订购两个选择,但没有给出预期的结果。
-
将排序所需的列添加到联合的每个成员的 SELECT 子句中。这并不意味着您还必须将它们添加到主查询的 SELECT 子句中;保持 that 不变,但添加子查询。
-
嗯,在大多数情况下,按不可见列排序是没有用的。除非您解释,否则结果看起来是无序的。