【发布时间】:2022-01-20 20:52:31
【问题描述】:
我正在尝试优化一个函数(MySQL),但是JOIN仍然没有完全理解(我尝试做一个简单的例子):
我有 2 张桌子:
表项
ID | ID_ORDER | ID_BOX | NAME
001 | 2564 | 123 | SPOON_1
002 | 2564 | 123 | SPOON_2
006 | 2564 | 123 | SHOES_2
007 | 2564 | 123 | SHOES_1
003 | 2565 | 124 | SPOON_1
004 | 2565 | 124 | SPOON_2
008 | 2565 | 124 | SHOES_1
009 | 2565 | 124 | SHOES_2
005 | 2565 | 125 | SPOON_1
010 | 2565 | 125 | SHOES_1
对象的描述通过 ID_CONTRACT 和 NAME 链接到 ITEM 表。(同一合同中不可能有两个同名的项目)。
表格描述:
ID_ORDER | NAME_ITEM | LENGTH | WIDTH | ....
2564 | SPOON_1 | 200 | 20 ...
2564 | SPOON_2 | 300 | 20 ...
2564 | SHOES_1 | 500 | 20 ...
2564 | SHOES_2 | 600 | 20 ...
现在,我需要知道合同中的所有项目及其描述,我使用以下查询:
SELECT *,description.* FROM items INNER JOIN description
ON (description.ID_CONTRACT=items.ID_CONTRACT AND description.NAME_ITEM=items.NAME)
WHERE ID_CONTRACT= 2564
首先,我刚刚读到它是不正确的查询(我需要在查询中手动复制所有描述字段?),因为ID_CONTRACT 在两个表中,有时它会给我错误(有时不是),我阅读there,不可能忽略重复项。
然后我想知道,当我在ITEMS 表上进行选择时,MySQL 是否正在为DESCRIPTION 表中的每一行寻找对应关系?
有没有办法优化查询(另一种JOIN),所以它不会每次都在ITEMS表中搜索,当他在ITEMS中遇到2个(或更多)元素时,具有相同的ID_CONTRACT/NAME?
【问题讨论】: