MYSQL-重复

MYSQL-重复,mysql,duplicates,Mysql,Duplicates,嗨,我目前正在写一些软件的工作,以管理我们的股票。 我搜索了两张表 主库存(保存每一个库存代码和描述) 库存(保存库存代码、位置、数量…) 一切都很好,但这是我的问题 假设我的stock表有两条记录,stockCode为“testcode”,但它们都有不同的位置和数量 然后我有我的master_股票和股票代码的一个实例及其描述 如果我搜索说“testcode”,那么我会得到3个结果2来自股票,这是好的,但我也会得到一个来自master_股票的结果,我想得到它,所以如果股票中至少有一个结果,那么我

嗨,我目前正在写一些软件的工作,以管理我们的股票。 我搜索了两张表

主库存(保存每一个库存代码和描述) 库存(保存库存代码、位置、数量…)

一切都很好,但这是我的问题

假设我的stock表有两条记录,stockCode为“testcode”,但它们都有不同的位置和数量

然后我有我的master_股票和股票代码的一个实例及其描述

如果我搜索说“testcode”,那么我会得到3个结果2来自股票,这是好的,但我也会得到一个来自master_股票的结果,我想得到它,所以如果股票中至少有一个结果,那么我不想显示master_股票中的行,但是如果股票中没有找到任何东西,那么显示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”,其中股票值为空。

非常感谢,这非常有效,正是我希望它的工作方式!真不敢相信它这么简单!