问题描述
我有一个组合了几个表的选择查询。 PRODUCTION_ORDER_RESULTS
,PRODUCTION_ORDERS
和SERVICE_GUaraNTY_NEW
具有相同的值,但是STOCKS
表却没有。
SELECT PR_ORDERS.ARRIVED_CITY,PR_ORDERS.MONTAJ_DATE,PR_ORDER_RESULT.TRANSFER_DATE,PR_ORDERS.P_ORDER_ID,PR_ORDER_RESULT.P_ORDER_ID,SG.SALE_CONSUMER_ID,SG.IS_SERI_SONU,S.BRAND_ID,S.PROPERTY
FROM workcube_test_1.PRODUCTION_ORDER_RESULTS PR_ORDER_RESULT,workcube_test_1.PRODUCTION_ORDERS PR_ORDERS,workcube_test_1.SERVICE_GUaraNTY_NEW SG,workcube_test_1.STOCKS S
WHERE PR_ORDER_RESULT.P_ORDER_ID = PR_ORDERS.P_ORDER_ID
AND PR_ORDER_RESULT.PR_ORDER_ID = SG.PROCESS_ID
这里的问题是PRODUCTION_ORDER_RESULTS
,PRODUCTION_ORDERS
,SERVICE_GUaraNTY_NEW
返回了四个数据行,一旦我添加了STOCKS
表arrived_city
, montaj_date
,transfer_date
列与STOCKS
表的行并排,但列的值应为null,而不是数据。
我尝试的方法是STOCKS
表的UNION,但是联合表的值将被忽略,不能在html块中使用它们。
解决方法
在STOCKS
表所在的表之间还需要至少有一个连接条件,我认为在诸如STOCK_ID
之类的表中可能存在这样的列PRODUCTION_ORDER_RESULTS
与STOCKS
表联接。我认为这应该是多个返回行的原因。如果没有公共列,则由于当前查询中已有STOCK
逻辑,返回的数据将产生与CROSS JOIN
表中的记录数一样多的数据。因此,将查询重新排列为
SELECT PR_ORDERS.ARRIVED_CITY,PR_ORDERS.MONTAJ_DATE,PR_ORDER_RESULT.TRANSFER_DATE,PR_ORDERS.P_ORDER_ID,PR_ORDER_RESULT.P_ORDER_ID,SG.SALE_CONSUMER_ID,SG.IS_SERI_SONU,S.BRAND_ID,S.PROPERTY
FROM workcube_test_1.PRODUCTION_ORDER_RESULTS PR_ORDER_RESULT
JOIN workcube_test_1.PRODUCTION_ORDERS PR_ORDERS
ON PR_ORDER_RESULT.P_ORDER_ID = PR_ORDERS.P_ORDER_ID
JOIN workcube_test_1.SERVICE_GUARANTY_NEW SG
ON PR_ORDER_RESULT.PR_ORDER_ID = SG.PROCESS_ID
JOIN workcube_test_1.STOCKS S
ON PR_ORDER_RESULT.STOCK_ID = S.ID