根据字段执行不同的mysql选择

问题描述 投票:0回答:1

i具有用于资产结帐系统的一系列表格。有2种资产。.股票和资产。它们都有存储在单独表格中的条形码。这是我的桌子的外观

结帐表:(sipe_check_out)

+----+--------+----------+----------+-----+---------------------+----------+------+----------+
| id | job_id | stock_id | asset_id | qty | out_time            | user_out | note | depot_id |
+----+--------+----------+----------+-----+---------------------+----------+------+----------+
| 1  | 1625   | 0        | 1026     | 1   | 0000-00-00 00:00:00 | 1288     |      | 1        |
+----+--------+----------+----------+-----+---------------------+----------+------+----------+
| 2  | 1625   | 8        | 0        | 10  | 0000-00-00 00:00:00 | 1288     |      | 0        |
+----+--------+----------+----------+-----+---------------------+----------+------+----------+

条形码表:(sipe_barcodes)

+----+----------+----------+---------+
| id | stock_id | asset_id | barcode |
+----+----------+----------+---------+
| 1  | 0        | 1026     | AR2221  |
+----+----------+----------+---------+
| 2  | 8        | 0        | MAR0001 |
+----+----------+----------+---------+

库存表:(sipe_stock)

+-----+------------+-----------+--------+----------+---------------------+------+--------------+------+-------------+
| id  | title      | alt_title | status | category | last_updated        | memo | replace_cost | flag | description |
+-----+------------+-----------+--------+----------+---------------------+------+--------------+------+-------------+
| 8   | Cable XLR  | Cable XLR | 2      | 10       | 2019-01-03 20:45:40 |      | 750          | 0    |             |
+-----+------------+-----------+--------+----------+---------------------+------+--------------+------+-------------+
| 237 | Fresnel 1K |           | 0      | 43       | 2019-01-02 19:08:45 |      | 12000        | 0    |             |
+-----+------------+-----------+--------+----------+---------------------+------+--------------+------+-------------+

资产表:(sipe_stock_asset)

+------+----------+-----+--------+--------+---------------------+------+---------------+-------------+-------+
| id   | stock_id | qty | serial | status | status_change       | memo | purchase_date | retire_date | depot |
+------+----------+-----+--------+--------+---------------------+------+---------------+-------------+-------+
| 1026 | 237      | 1   |        | 0      | 2019-01-02 19:09:00 | NULL | NULL          | NULL        | 1     |
+------+----------+-----+--------+--------+---------------------+------+---------------+-------------+-------+

我需要列出已签出到特定job_id的所有项目的列表。这些项目在检查表中存放。但出于显示目的,我需要获取商品条形码(存储在条形码表中),商品标题(存储在库存表中)和数量(存储在结帐表中)

这是我的问题。选择查询对于库存项目和资产项目是不同的。如果是库存商品,则需要从结帐表中获取库存编号,然后从库存表中获取标题,并从结帐表中获取数量。

这是我获取存货的工作查询

SELECT 
sipe_barcodes.barcode,
sipe_stock.title,
sipe_check_out.qty,
sipe_check_out.out_time
FROM
sipe_barcodes
INNER JOIN sipe_stock ON (sipe_barcodes.stock_id = sipe_stock.id)
INNER JOIN sipe_check_out ON (sipe_stock.id = sipe_check_out.stock_id)
WHERE
sipe_check_out.job_id = 1625

这将返回以下内容

+---------+-----------+-----+---------------------+
| barcode | title     | qty | out_time            |
+---------+-----------+-----+---------------------+
| MAR0001 | Cable XLR | 10  | 0000-00-00 00:00:00 |
+---------+-----------+-----+---------------------+

如果该项目是库存。我们从结帐中获取asset_id。但是我们需要从结帐表中获取stock_id,以便从stock表中获取股票标题。结帐表中的数量和条形码表中的条形码

这是我获取资产项目的工作查询

SELECT 
sipe_barcodes.barcode, 
sipe_stock.title, 
sipe_check_out.qty, 
sipe_check_out.out_time
FROM sipe_check_out 
INNER JOIN sipe_stock_asset ON (sipe_check_out.asset_id = sipe_stock_asset.id) 
INNER JOIN sipe_stock ON (sipe_stock_asset.stock_id = sipe_stock.id) 
LEFT JOIN sipe_barcodes ON (sipe_check_out.asset_id = sipe_barcodes.asset_id) 
WHERE sipe_check_out.job_id = 1625

这使它恢复原状

+---------+------------+-----+---------------------+
| barcode | title      | qty | out_time            |
+---------+------------+-----+---------------------+
| AR2221  | Fresnel 1K | 1   | 0000-00-00 00:00:00 |
+---------+------------+-----+---------------------+

问题

我如何构建一个单一的mysql查询,可以选择所有已检出的项目,无论它们是产生以下输出的资产还是股票

+---------+------------+-----+---------------------+
| barcode | title      | qty | out_time            |
+---------+------------+-----+---------------------+
| AR2221  | Fresnel 1K | 1   | 0000-00-00 00:00:00 |
+---------+------------+-----+---------------------+
| MAR0001 | Cable XLR  | 10  | 0000-00-00 00:00:00 |
+---------+------------+-----+---------------------+

非常感谢您的帮助

谢谢

php mysql select conditional-statements
1个回答
0
投票

您可以将UNION与提供的select语句一起使用

SELECT 
    sipe_barcodes.barcode,
    sipe_stock.title,
    sipe_check_out.qty,
    sipe_check_out.out_time
FROM
    sipe_barcodes
        INNER JOIN
    sipe_stock ON (sipe_barcodes.stock_id = sipe_stock.id)
        INNER JOIN
    sipe_check_out ON (sipe_stock.id = sipe_check_out.stock_id)
WHERE
    sipe_check_out.job_id = 1625 

UNION ALL 

SELECT 
    sipe_barcodes.barcode,
    sipe_stock.title,
    sipe_check_out.qty,
    sipe_check_out.out_time
FROM
    sipe_check_out
        INNER JOIN
    sipe_stock_asset ON (sipe_check_out.asset_id = sipe_stock_asset.id)
        INNER JOIN
    sipe_stock ON (sipe_stock_asset.stock_id = sipe_stock.id)
        LEFT JOIN
    sipe_barcodes ON (sipe_check_out.asset_id = sipe_barcodes.asset_id)
WHERE
    sipe_check_out.job_id = 1625
© www.soinside.com 2019 - 2024. All rights reserved.