MYSQL-重复
嗨,我目前正在写一些软件的工作,以管理我们的股票。 我搜索了两张表 主库存(保存每一个库存代码和描述) 库存(保存库存代码、位置、数量…) 一切都很好,但这是我的问题 假设我的stock表有两条记录,stockCode为“testcode”,但它们都有不同的位置和数量 然后我有我的master_股票和股票代码的一个实例及其描述 如果我搜索说“testcode”,那么我会得到3个结果2来自股票,这是好的,但我也会得到一个来自master_股票的结果,我想得到它,所以如果股票中至少有一个结果,那么我不想显示master_股票中的行,但是如果股票中没有找到任何东西,那么显示master_股票中的一行 因此,我返回的结果并不需要查看,这意味着搜索速度较慢,而且由于结果的数量太多,员工看起来会感到困惑MYSQL-重复,mysql,duplicates,Mysql,Duplicates,嗨,我目前正在写一些软件的工作,以管理我们的股票。 我搜索了两张表 主库存(保存每一个库存代码和描述) 库存(保存库存代码、位置、数量…) 一切都很好,但这是我的问题 假设我的stock表有两条记录,stockCode为“testcode”,但它们都有不同的位置和数量 然后我有我的master_股票和股票代码的一个实例及其描述 如果我搜索说“testcode”,那么我会得到3个结果2来自股票,这是好的,但我也会得到一个来自master_股票的结果,我想得到它,所以如果股票中至少有一个结果,那么我
SELECT ms.stockCode AS 'Stock Code',
ms.description AS 'Description',
st.quantity AS 'Quantity',
um.UnitMeasurementName AS 'Unit Measurement',
dep.departmentName AS 'Location',
st .rack AS 'Rack',
st.cost AS 'Cost Per Unit',
(st.cost * st.quantity) AS 'Total Cost',
sc.conditionDescription AS 'Condition'
FROM stock As st
INNER JOIN master_stock ms on ms.stockCode = st.stockCode
INNER JOIN racks r on r.rack= st.rack
INNER JOIN departments dep on dep.departmentId = r.departmentId
INNER JOIN unit_measurements um on um.unitMeasurementId = ms.unitMeasurementId
INNER JOIN stock_conditions sc on sc.conditionId = st.stockCondition
WHERE ms.stockCode LIKE '%testcode%'
Union DISTINCT
SELECT ms.stockCode AS 'Stock Code',
ms.description AS 'Description',
'0',
'NO MEASUREMENT',
'NO LOCATION',
'NO RACK',
'0',
'0',
'NO CONDITION'
FROM master_stock As ms
WHERE ms.stockCode LIKE '%testcode%';
在union stock表的第二个查询中使用左联接来确定stock表中是否有具有相同代码的条目:
...
union distinct
SELECT ms.stockCode AS 'Stock Code',
ms.description AS 'Description',
'0',
'NO MEASUREMENT',
'NO LOCATION',
'NO RACK',
'0',
'0',
'NO CONDITION'
FROM
master_stock as ms
LEFT JOIN stock as st on ms.stockCode = st.stockCode
WHERE ms.stockCode LIKE '%testcode%' and st.stockCode IS NULL;
一种方法是完全删除并集,并使用master_stock中的左连接,而不是内部连接:
SELECT ms.stockCode AS 'Stock Code',
ms.description AS 'Description',
IFNULL(st.quantity, 0) AS 'Quantity',
...
FROM master_stock as ms
LEFT JOIN stock as st on ms.stockCode = st.stockCode
WHERE ms.stockCode LIKE '%testcode%
这将为您提供所有与空值匹配的主库存条目,其中没有相应的库存条目。然后,您可以在显示例程中将空值替换为常量“NO MEASUREMENT”字符串,或者在SELECT中使用IFNULL表达式返回“NO MEASUREMENT”,其中股票值为空。非常感谢,这非常有效,正是我希望它的工作方式!真不敢相信它这么简单!