0

这是我正在使用的 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 应该是相同的列名,但我无法更改它,因为它会导致我正在使用的应用程序中出现大量错误。

任何帮助都会很棒,谢谢

4

2 回答 2

0

将 Right Join 与 COALESCE 结合使用会对您有所帮助。

于 2012-08-17T20:28:18.797 回答
0

我想给你一些反馈意见:

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