Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按行中的两列排序_Mysql - Fatal编程技术网

Mysql 按行中的两列排序

Mysql 按行中的两列排序,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

我有两个价格从两个表,这是连接。我需要从两个表中按价格订购行。当第一个价格为零或空时,则取第二个价格,否则取第一个价格。因此,必须改变部分订单

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
表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不太有经验的用户了解