我昨天开始学习PHP / MySQL,所以如果这是一个简单/愚蠢/严厉的问题我会道歉。
我设置了一个包含两个表的数据库:
地点
l_id | loc_name
----------------
1 | France
2 | London
3 | The Moon
项
i_id | item_name | item_loc
----------------------------
1 | Book | 1
2 | Mirror | 1
3 | Bread | 2
4 | Camera | 2
5 | Cheese | 3
6 | Ladle | 3
当提供l_id号码列表时,我如何才能最好地找到loc_name以及分配给每个项目的所有项目?
这可以通过单个查询完成,还是需要查询两次 - 一次是名称,一次是项目?
另一方面,我在其他查询中使用JOIN取得了一些非常小的成功,但我真的不明白他们为什么会这样做。我很难让它在我脑海中确切地了解幕后的过程以及语法如何描述它。如果任何人都可以推荐关于这个主题的任何阅读材料那么棒。
感谢您的帮助,对不起,如果问题有点
答案 0 :(得分:1)
在阅读材料方面,来自O'Reilly的Learning SQL是一个很好的起点。如果您更喜欢免费资源,那么W3Schools SQL tutorial可以很好地介绍基础知识。我发现使用带有显式连接的更全面的语法可以更容易地理解发生了什么。因此,在您的示例中,例如:
SELECT *
FROM locations AS loc
INNER JOIN items AS i
ON loc.l_id = i.item_loc
WHERE loc.l_id IN (value1,value2,...)
答案 1 :(得分:1)
应该有效:
SELECT items.i_id, items.item_name, location.loc_name FROM items LEFT JOIN locations ON l_id = items.item_loc
答案 2 :(得分:0)
由于l_id和item_loc是相同的属性,我们可以在两个表上执行内连接。
select l.loc_name,i.item_name
from Items i inner join Locations l
on i.item_loc=l.l_id
基本上它会通过映射公共属性值(这里是item_loc和l_id)来组合两个表。我们得到另一个包含属性的表(i_id,item_name,item_loc,loc_name)。