mysql - 具有多列选择的 if 语句

标签 mysql sql

我不知道如何解决这个问题,但我正在尝试根据 orders 表中的数据告诉我查看的位置从多个表中选择信息,第一个语句有效但是仅返回表 orders_bought_a 的信息,而不返回 orders_bought_b

的信息

如果订单来自位置a,那么我需要查询从表orders_bought_a中获取信息,对于位置b也应该这样做>.

有没有办法像我在 preferred 语句中那样在 mysql 中进行 block 选择?

如有任何帮助,我们将不胜感激,抱歉,如果这看起来一团糟,我已尽力而为。

当前声明:

SELECT oi.id         AS order_item_id,
       o.status,
       o.processed,
       oba.item_id   AS buy_item_id,
       oba.price     AS buy_price,
       oba.CONDITION AS buy_condition,
       obb.item_id   AS buy_item_id,
       obb.price     AS buy_price,
       obb.CONDITION AS buy_condition
FROM   order_items oi
       LEFT JOIN books b
              ON oi.isbn = b.isbn
       LEFT JOIN orders o
              ON o.id = oi.order_id
       LEFT JOIN orders_bought_a oba
              ON oba.id = oi.buy_order_id
       LEFT JOIN orders_bought_b obb
              ON obb.id = oi.buy_order_id
ORDER  BY date_ordered DESC 

首选(无效):

SELECT oi.id AS order_item_id, o.status, o.processed,  

    CASE
    WHEN(oi.location == 'a') THEN(
        oba.item_id AS buy_item_id, 
        oba.price AS buy_price, 
        oba.condition AS buy_condition
    )   

    WHEN(oi.location == 'b') THEN(      
        obb.item_id AS buy_item_id, 
        obb.price AS buy_price, 
        obb.condition AS buy_condition, 
    )       

FROM orders_items oi 
LEFT JOIN books b ON oi.isbn = b.isbn 
LEFT JOIN orders o ON o.id = oi.order_id 
LEFT JOIN orders_bought_a oba ON oba.id = oi.buy_order_id 
LEFT JOIN orders_bought_b obb ON obb.id = oi.buy_order_id 
ORDER BY date_ordered DESC

最佳答案

我建议从一个表中选择数据并将其与其他表中的数据合并。
像这样:

SELECT oi.id AS order_item_id, o.status, o.processed,
    oba.item_id AS buy_item_id, 
    oba.price AS buy_price, 
    oba.condition AS buy_condition

FROM orders_items oi 
LEFT JOIN books b ON oi.isbn = b.isbn 
LEFT JOIN orders o ON o.id = oi.order_id 
LEFT JOIN orders_bought_a oba ON oba.id = oi.buy_order_id 
WHERE oi.location = 'a'

UNION ALL

SELECT oi.id AS order_item_id, o.status, o.processed,
    obb.item_id AS buy_item_id, 
    obb.price AS buy_price, 
    obb.condition AS buy_condition,

FROM orders_items oi 
LEFT JOIN books b ON oi.isbn = b.isbn 
LEFT JOIN orders o ON o.id = oi.order_id 
LEFT JOIN orders_bought_b obb ON obb.id = oi.buy_order_id 
WHERE oi.location = 'b'
ORDER BY date_ordered DESC

关于mysql - 具有多列选择的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22490589/

相关文章:

c# - 无法从 'string' 转换为“Microsoft.EntityFrameworkCore.ServerVersion”

php - 通过php锁定表

mysql - 从 csv 导入时 mysql 出错

php - 多查询 PHP 问题

sql - 雪花: SELECT "COLUMN" with double quotes

mysql - 将从日期时间列中提取的时间与 MariaDB 和 MySQL 中的静态时间进行比较

sql - 在事务中使用@@IDENTITY 是否安全?

php - 从3个表中按时间对mysql结果进行排序

php - 需要帮助构建查询 laravel 5.2

mysql - 我们可以通过统一列来提高查询性能吗?