Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询多表选择_Sql - Fatal编程技术网

SQL查询多表选择

SQL查询多表选择,sql,Sql,我有三张桌子, -部分定义一些常规项目部分的表格。 -Categorytable>有一个“section”列(外键)。 -产品表->有一个“类别”列(外键) 我想得到所有属于X部门的产品 我怎么做 从选择中选择?这里有很多相同的答案。然而,出于某种原因,他们都加入了部分表,这(可能)是不必要的 select s.section, p.* from section s inner join category c on c.section = s.section inner join product

我有三张桌子,
-
部分
定义一些常规项目部分的表格。
-
Category
table>有一个“section”列(外键)。
-
产品
表->有一个“类别”列(外键)

我想得到所有属于X部门的产品

我怎么做


从选择中选择?

这里有很多相同的答案。然而,出于某种原因,他们都加入了
部分
表,这(可能)是不必要的

select s.section, p.*
from section s
inner join category c on c.section = s.section
inner join product p on p.category = c.category
where s.section = 'section1'
select
  p.*

from
  Product    p,
  Category   c

where
  p.category_id = c.id and
  c.section_id = 123
;

根据@nemiss的请求,显式ANSI
JOIN
语法:

select
  p.*

from Product    p

join Category   c
  on c.id = p.category_id
 and c.section_id = 123
;

包含
部分
表的可能原因:根据部分名称(而不是ID)选择产品

如果执行此操作,您需要确保
Section.name
已编制索引

alter table Product add index name;

这里有很多相同的答案。然而,出于某种原因,他们都加入了
部分
表,这(可能)是不必要的

select
  p.*

from
  Product    p,
  Category   c

where
  p.category_id = c.id and
  c.section_id = 123
;

根据@nemiss的请求,显式ANSI
JOIN
语法:

select
  p.*

from Product    p

join Category   c
  on c.id = p.category_id
 and c.section_id = 123
;

包含
部分
表的可能原因:根据部分名称(而不是ID)选择产品

如果执行此操作,您需要确保
Section.name
已编制索引

alter table Product add index name;

对第节不是必需的!!它只是定义了有关该部分的信息,但对我的查询没有帮助!我不喜欢使用multi-from(表1、表2),可以改为使用join吗?您不必连接到节,但通常不直接基于id进行查询,而是根据行的某些特征进行查询。您的查询较短,但灵活性要差得多。如果数据库中没有显式强制FK关系,也会受到影响,因为在这种情况下,c.section_id可能包含一个不存在的值。@Mike Burton,OP说他正在使用FKs。他确实这么说。从形式上讲,这并不一定是真的。我认识一些开发人员,他们在FK的定义中包含了“非正式”表链接。这也不意味着他使用的DBMS在管理FKs方面做得很好(有几个旧系统可以强制提交无效的遗留数据)。此外,我的主要观点是,查询忽略了显式关系,而选择了一个幻数,这在几乎所有情况下都是糟糕的代码设计。是的!第节不是必需的!!它只是定义了有关该部分的信息,但对我的查询没有帮助!我不喜欢使用multi-from(表1、表2),可以改为使用join吗?您不必连接到节,但通常不直接基于id进行查询,而是根据行的某些特征进行查询。您的查询较短,但灵活性要差得多。如果数据库中没有显式强制FK关系,也会受到影响,因为在这种情况下,c.section_id可能包含一个不存在的值。@Mike Burton,OP说他正在使用FKs。他确实这么说。从形式上讲,这并不一定是真的。我认识一些开发人员,他们在FK的定义中包含了“非正式”表链接。这也不意味着他使用的DBMS在管理FKs方面做得很好(有几个旧系统可以强制提交无效的遗留数据)。此外,我的主要观点是,查询忽略了显式关系而使用了幻数,这在几乎所有情况下都是糟糕的代码设计。