从视图查询中得到奇怪的结果
Getting strange results from view query
我正在测试由离开公司的其他人编写的数据库。
这是它的样子:
这里是查询:
SELECT DISTINCT
bcprod.product.item_number,
bcprod.product.product_id,
bcprod.product_price.price1,
bcprod.product_price.price2,
bcprod.product_price.price3,
bcprod.product_price.price4,
bcprod.product_price.option_value_id,
bcprod.product_option.weight_class,
bcprod.product_option.status
FROM bcprod.product
INNER JOIN bcprod.product_price ON bcprod.product_price.product_id = bcprod.product.product_id
INNER JOIN bcprod.product_option ON bcprod.product_option.product_id = bcprod.product.product_id
WHERE bcprod.product.is_sale = 1
AND bcprod.product.status = 1
AND bcprod.product_option.status = 1
AND bcprod.product.product_id = 1
问题是当我检查 product_option 中的权重列时,我得到了 815 行,而未检查权重的情况下返回了 285 行(在没有最后一个 AND in where 子句的情况下进行测试)。每次进行更改时,我都会保存设计视图——之后我什至会刷新它。我检查了 product_price 和 product_option table 中的重复项,因为我认为 option_value_id 和 product_id:
有问题
select bcprod.product_price.product_id,
bcprod.product_price.option_value_id,
Count(*)
from bcprod.product_price
group by bcprod.product_price.product_id,
bcprod.product_price.option_value_id
having (Count(*)>1)
我没有发现重复项 - 我需要一些关于如何解决这个问题的建议 - 我不太擅长使用数据库。
option_value_id 会翻倍,如果一个项目只有两行 - 检查重量后它会翻倍到 4 行 - 例如?
不正确的数据:
正确数据 - 无重量:
我能够通过修改查询来解决问题:
SELECT DISTINCT
bcprod.product.item_number,
bcprod.product.product_id,
bcprod.product_price.price1,
bcprod.product_price.price2,
bcprod.product_price.price3,
bcprod.product_price.price4,
bcprod.product_option.status AS option_status,
bcprod.product_option.weight_class,
bcprod.product.category_id,
bcprod.product_option.weight,
bcprod.product_price.option_value_id,
bcprod.product.weight AS accessesory_weight,
bcprod.product.weight_class AS accessesory_weightclass,
bcprod.product.price,
bcprod.product.status AS main_status,
bcprod.product.is_sale,
bcprod.product.is_accessory,
bcprod.product.image,
bcprod.option_value.option_name
FROM bcprod.product INNER JOIN
bcprod.product_price ON bcprod.product_price.product_id =
bcprod.product.product_id INNER JOIN
bcprod.product_option ON bcprod.product_option.product_id =
bcprod.product.product_id AND bcprod.product_price.option_value_id =
bcprod.product_option.option_value_id INNER JOIN
bcprod.option_value ON bcprod.product_price.option_value_id =
bcprod.option_value.option_value_id AND
bcprod.product_option.option_value_id =
bcprod.option_value.option_value_id
WHERE (bcprod.product.status = 1)
如果有人能提出更好的主意 - 我洗耳恭听。
问题出在上次连接中 - 添加 AND。
我正在测试由离开公司的其他人编写的数据库。
这是它的样子:
这里是查询:
SELECT DISTINCT
bcprod.product.item_number,
bcprod.product.product_id,
bcprod.product_price.price1,
bcprod.product_price.price2,
bcprod.product_price.price3,
bcprod.product_price.price4,
bcprod.product_price.option_value_id,
bcprod.product_option.weight_class,
bcprod.product_option.status
FROM bcprod.product
INNER JOIN bcprod.product_price ON bcprod.product_price.product_id = bcprod.product.product_id
INNER JOIN bcprod.product_option ON bcprod.product_option.product_id = bcprod.product.product_id
WHERE bcprod.product.is_sale = 1
AND bcprod.product.status = 1
AND bcprod.product_option.status = 1
AND bcprod.product.product_id = 1
问题是当我检查 product_option 中的权重列时,我得到了 815 行,而未检查权重的情况下返回了 285 行(在没有最后一个 AND in where 子句的情况下进行测试)。每次进行更改时,我都会保存设计视图——之后我什至会刷新它。我检查了 product_price 和 product_option table 中的重复项,因为我认为 option_value_id 和 product_id:
有问题select bcprod.product_price.product_id,
bcprod.product_price.option_value_id,
Count(*)
from bcprod.product_price
group by bcprod.product_price.product_id,
bcprod.product_price.option_value_id
having (Count(*)>1)
我没有发现重复项 - 我需要一些关于如何解决这个问题的建议 - 我不太擅长使用数据库。 option_value_id 会翻倍,如果一个项目只有两行 - 检查重量后它会翻倍到 4 行 - 例如?
不正确的数据:
正确数据 - 无重量:
我能够通过修改查询来解决问题:
SELECT DISTINCT
bcprod.product.item_number,
bcprod.product.product_id,
bcprod.product_price.price1,
bcprod.product_price.price2,
bcprod.product_price.price3,
bcprod.product_price.price4,
bcprod.product_option.status AS option_status,
bcprod.product_option.weight_class,
bcprod.product.category_id,
bcprod.product_option.weight,
bcprod.product_price.option_value_id,
bcprod.product.weight AS accessesory_weight,
bcprod.product.weight_class AS accessesory_weightclass,
bcprod.product.price,
bcprod.product.status AS main_status,
bcprod.product.is_sale,
bcprod.product.is_accessory,
bcprod.product.image,
bcprod.option_value.option_name
FROM bcprod.product INNER JOIN
bcprod.product_price ON bcprod.product_price.product_id =
bcprod.product.product_id INNER JOIN
bcprod.product_option ON bcprod.product_option.product_id =
bcprod.product.product_id AND bcprod.product_price.option_value_id =
bcprod.product_option.option_value_id INNER JOIN
bcprod.option_value ON bcprod.product_price.option_value_id =
bcprod.option_value.option_value_id AND
bcprod.product_option.option_value_id =
bcprod.option_value.option_value_id
WHERE (bcprod.product.status = 1)
如果有人能提出更好的主意 - 我洗耳恭听。 问题出在上次连接中 - 添加 AND。