我有以下表格:
CREATE TABLE IF NOT EXISTS "image_e"
(
"id" int unsigned NOT NULL AUTO_INCREMENT,
"title" varchar(32),
"alt" varchar(16) NOT NULL,
PRIMARY KEY ("id")
) ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_bin;
CREATE TABLE IF NOT EXISTS "image_version_e"
(
"id" int unsigned NOT NULL AUTO_INCREMENT,
"imageId" int unsigned NOT NULL,
"format" varchar(4) NOT NULL,
"size" int unsigned NOT NULL,
"width" smallint unsigned NOT NULL,
"height" smallint unsigned NOT NULL,
"src" varchar(64) NOT NULL,
PRIMARY KEY ("id")
) ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_bin;
ALTER TABLE "image_version_e"
ADD UNIQUE KEY ("imageId", "format", "width", "height"),
ADD UNIQUE KEY ("src");
我想将这些连接到表格以将图像行与其关联的图像版本行链接起来。我加入他们的顺序真的很重要吗?如果我这样做有什么区别:
SELECT *
FROM image_e
LEFT JOIN image_version_e
ON image_version_e.imageId = image_e.id
而不是:
SELECT *
FROM image_version_e
LEFT JOIN image_e
ON image_e.id = image_version_e.id
答案 0 :(得分:1)
您正在进行left join
,因此两个查询之间存在很大差异。
第一个记录image_e
中的所有记录以及image_version_e
中的匹配记录。
第二个保留image_version_e
中的所有记录以及匹配的记录罪image_e
。
在这两个中,您应该使用对您的应用程序而言语义正确的那个。
您很可能真的需要inner join
:
SELECT *
FROM image_e inner join
image_version_e
ON image_version_e.imageId = image_e.id;
使用内部联接,联接顺序不应该有所不同(编译器将选择它认为最佳顺序)。