我有两个表,分别是 tbl_product1 和 tbl_product2。
tbl_product1:
model_name
lot_num
status_prod1
datecreated
date_received
tbl_product2:
model_name
lot_num
status_prod2
last_date
我想将这两个表之间的 model_name 和 lot_num 组合在一列中。然后加入来自tbl_prod1和status_prod2、last_date的status_prod1、datecreated、date_received。
我的 sql 查询:
$query = "SELECT c.model_name, c.lot_num, c.s1, c.s2, c.datecreated, c.date_received, c.last_date
FROM (SELECT model_name, lot_num, status_prod1 AS s1, NOT NULL AS s2, datecreated, date_received, NULL AS last_date FROM tbl_product1 WHERE status_prod1 = 'sent' UNION SELECT model_name, lot_num, NOT NULL AS s1, status_prod2 AS s2, NULL AS datecreated, NULL AS date_received, last_date FROM tbl_product2 WHERE status_prod2 = 'sent')c
ORDER BY model_name, lot_num ASC";
但是结果并不如我所愿。当我运行此查询时,它显示双 lot_num 和 model_name。我不知道怎么解释。
例如,当我运行我的代码时,此输出将显示:
model_name | lot_num | status_prod1 | status_prod2
---------------------------------------------------
magic1 | 001 | sent |
magic1 | 001 | | sent
sss | 100 | sent |
ddd | 222 | sent |
ddd | 222 | | sent
假设表格应该是这样的:
model_name | lot_num | status_prod1 | status_prod2
---------------------------------------------------
magic1 | 001 | sent | sent
sss | 100 | sent |
ddd | 222 | sent | sent
最佳答案
你可以通过聚合得到你想要的:
SELECT c.model_name, c.lot_num,
max(c.s1) as s1, max(c.s2) as s2, max(c.datecreated) as date_created,
max(c.date_received) as date_received, max(c.last_date)
FROM (SELECT model_name, lot_num, status_prod1 AS s1, NOT NULL AS s2, datecreated, date_received, NULL AS last_date
FROM tbl_product1
WHERE status_prod1 = 'sent' UNION ALL
SELECT model_name, lot_num, NOT NULL AS s1, status_prod2 AS s2, NULL AS datecreated, NULL AS date_received, last_date
FROM tbl_product2
WHERE status_prod2 = 'sent'
) c
GROUP BY c.model_name, c.lot_num
ORDER BY model_name, lot_num ASC
关于php - 合并数据并加入两个表之间的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27370116/