Mysql 按行中的两列排序
我有两个价格从两个表,这是连接。我需要从两个表中按价格订购行。当第一个价格为零或空时,则取第二个价格,否则取第一个价格。因此,必须改变部分订单 SQLMysql 按行中的两列排序,mysql,Mysql,我有两个价格从两个表,这是连接。我需要从两个表中按价格订购行。当第一个价格为零或空时,则取第二个价格,否则取第一个价格。因此,必须改变部分订单 SQL SELECT table1.id , table1.price , table2.price FROM table1 JOIN table2 ON table1.id = table2.f_id ORDER BY table1.price ASC , table2.price ASC
SELECT table1.id
, table1.price
, table2.price FROM table1
JOIN table2
ON table1.id = table2.f_id
ORDER
BY table1.price ASC
, table2.price ASC
表1
id / price
1 / 50
2 / 0
3 / NULL
4 / 10
表2
f_id / price
1 / 60
2 / 30
3 / 5
4 / 100
我期待
3 / 5
4 / 10
2 / 30
1 / 50
ifnull
就是为此目的设计的():
ifnull
就是为此目的设计的():
您还可以使用用例
SELECT table1.id
CASE WHEN table1.price is null THEN table2.price
WHEN table1.price = 0 THEN table2.price
ELSE tabel1.price
END as my_price
JOIN table2 ON table1.id = table2.f_id
ORDER BY my_price ASC
您还可以使用用例
SELECT table1.id
CASE WHEN table1.price is null THEN table2.price
WHEN table1.price = 0 THEN table2.price
ELSE tabel1.price
END as my_price
JOIN table2 ON table1.id = table2.f_id
ORDER BY my_price ASC
您可以尝试下面的查询
SELECT
t1.id,
CASE
WHEN t1.price is null THEN t2.price
WHEN t1.price = 0 THEN t2.price
ELSE t1.price
END as finalPrice
FROM
table1 t1, table2 t2
WHERE
t1.id = t2.f_id
ORDER BY finalPrice
不要使用
内部联接
,而是直接使用t1.id=t2.f_id
进行比较。它会更快。您可以尝试下面的查询
SELECT
t1.id,
CASE
WHEN t1.price is null THEN t2.price
WHEN t1.price = 0 THEN t2.price
ELSE t1.price
END as finalPrice
FROM
table1 t1, table2 t2
WHERE
t1.id = t2.f_id
ORDER BY finalPrice
不要使用
内部联接
,而是直接使用t1.id=t2.f_id
进行比较。它会更快。注意COALESCE()符合ANSI标准standard@Strawberrycoalesce用它做什么?@tomasr这是一个非常类似的函数,但它与数据库无关。@草莓,你能展示一下这个查询的例子吗?用coalesce
替换ifnull
,仅此而已。注意coalesce()符合ANSI标准standard@Strawberrycoalesce用它做什么?@tomasr这是一个非常相似的函数,但它与数据库无关。@草莓,你能给出这个查询的例子吗?用coalesce
替换ifnull
,就这样。现在检查,但它会分别给出t1和t2的价格。现在检查,但它会分别给出t1和t2的价格。只有选项tbh。当价格为0
时,我的答案就不合适了。Musst忽略了这一点。My是一个建议用例,以这种方式,所有条件都是显式可见的,因此可以帮助那些在sqlOnly选项tbh方面不是很有经验的用户了解。当价格为0
时,我的答案就不合适了。Musst忽略了这一点。我的建议是这样使用案例,所有条件都是显式可见的,因此可以帮助对sql不太有经验的用户了解