对引用表的查询返回的记录少于它应该的记录

时间:2012-08-17 20:17:04

标签: mysql

以下是我正在使用的2个表:http://pastie.org/4539541

表products_options_values是引用表,products_images表是我要与引用表进行比较的表。

以下是我正在使用的查询:

select
products_options_values_name
from 
products_options_values as pov
inner join
products_images as img
on pov.products_options_values_id = img.color_id
where img.products_id = '426'

这只返回1条记录,但是当我执行此查询时:

select color_id from products_images where products_id = '426'

返回2条记录。

我很确定我的查询错误,但我不知道我该怎么做。 我知道products_images中的color_id名称和products_options_values中的products_options_values_id应该是相同的列名,但我无法更改它,因为它会导致我正在使用的应用程序中出现大量错误。

任何帮助都会很棒,谢谢

2 个答案:

答案 0 :(得分:0)

使用与COALESCE的正确加入可以帮助您。

答案 1 :(得分:0)

我想给你一些反馈意见:

  1. 您正在使用MyISAM表作为关系数据库。 MyISAM不支持通过外键建立关系,这可以保护数据库的引用完整性。如果没有外键,则无法保证引用其他表的表(在连接表的情况下)将反映数据库中的实际值。而是使用Innodb。
  2. 您不应在数字值上使用引号,“1”表示字符1,而不是整数中的1。虽然MySQL对此通常很宽容,但它仍然是不正确的。
  3. MyISAM只有表级锁。任何需要锁定的操作都会锁定整个表格以进行写入。这会导致并发问题。
  4. 颜色ID应该引用另一个枚举颜色的表,颜色ID列应该是一个整数来反映它。
  5. 如果您希望每个产品图片只有一种颜色,那么您应该在其上添加唯一标识符。
  6. 在您的where子句中,您应指定您所指的哪个表的products_id列。