Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 server 如何在SQL中联接4个表_Sql Server - Fatal编程技术网

Sql server 如何在SQL中联接4个表

Sql server 如何在SQL中联接4个表,sql-server,Sql Server,我想做的是用join选择所有4个表,但我不知道如何选择,因为没有一个表连接到所有其他表 create table Encomenda( idEncomenda int identity, idFornededor int not null, estado varchar not null, Constraint pk_Encomenda Primary Key (idEncomenda), ); create table Produto_En

我想做的是用join选择所有4个表,但我不知道如何选择,因为没有一个表连接到所有其他表

  create table Encomenda(
    idEncomenda int identity,
    idFornededor int not null,
    estado varchar not null,
    Constraint pk_Encomenda Primary Key (idEncomenda),
    );

    create table Produto_Encomenda(
    idProduto_Encomenda int identity,

    idProduto int not null,
    idEncomenda int not null,
    quantidade int not null,

    constraint pk_Produto_Encomenda Primary Key (idProduto_Encomenda),
    constraint fk_Produto foreign key (idProduto) references Produto (idProduto) ,
    constraint fk_idEncomenda foreign key (idEncomenda) references Encomenda (idEncomenda) ,
    );
    create table Fornecedor(
    idFornecedor int  identity,
    nomeFornecedor varchar(60) not null,
    moradaFornecedor varchar(60) not null,
    contactoFornecedor int not null,
    constraint pk_Fornecedor Primary Key (idFornecedor),
    );
    create table Produto(
    idProduto int identity,
    nomeProduto varchar(60) not null,
    quantidadeExistenteProduto int not null,
    precoUnidade float not null,
    Constraint pk_produto Primary Key (idProduto),
    );
我试图在其中的4个之间建立连接,我想展示/选择的是:

Fornecedor.nomeFornecedor, idEncomenda, Produto.nomeProduto and Produto_encomenda.quantidade" joined toguether where 
Produto.idproduto = produto_Encomenda.idproduto
Fornecedor.idFornecedor = Encomenda.idFornecedor

我不认为我能更好地解释,但最后我想选择一个包含ornecedor.nomeFornecedor、idEncomenda、Produto.nomeProduto和Produto_encomenda.quantidade的表,但是因为这4个表没有1个公共表,我在如何进行连接方面迷失了方向:\n我可能非常累,但是如果有人能帮助我,我会特别感谢,因为我在这里迷失了方向

您可以使用“join”语句连接表。有四种类型:

内部-仅在找到匹配项的位置连接

左侧-仅在右侧表中找到匹配项的位置进行联接,但联接整个左侧表

右-仅在左侧表中找到匹配项的位置进行联接,但联接整个右侧表

完全外部-将两个表连接在一起,即使没有找到匹配项

基本联接如下所示:

INNER JOIN MyTable ON MyTable.ID = SomeTable.ID
你应该读书


希望有帮助

好的,现在我想我更好地理解了您需要以下字段的问题:Fornecedor.nomeFornecedor、idEncomenda、Produto.nomeProduto和Produto_encomenda.quantidade

那么,让我们看看这是否有效:

SELECT f.nomeFornecedor, 
e.idEncomenda, 
p.nomeProduto,
pe.quantidade
FROM Fornecedor as f
INNER JOIN Encomenda AS e
ON f.idFornecedor = e.idFornededor 
INNER JOIN Produto_Encomenda as pe
ON e.idEncomenda = pe.idEncomenda
INNER JOIN Produto as p
ON p.idProduto = pe.idProduto

我认为这应该可以在一个表中运行,顺便说一句,vb.net在这里看起来不相关。请阅读。您的代码需要位于代码示例区域内,您的问题可以通过少量的研究轻松回答。您应该从加入一个表开始。这也有助于将您的创建表示例代码放入代码块中,以便以可读的方式格式化。事实上并非如此。您可以完美地执行“从table1,table2,其中table1.id2=table2.id2”的连接操作。的确,使用“JOIN”在以后会更清楚,但这并不是唯一的方法JOIN@asemprini87应避免旧的连接方式。它不仅一点也不清楚,尤其是在连接两个以上的表时,而且当需要在多个条件下连接时,它会变得非常困难,当您有与连接无关的where子句时,它会变得完全不可读。没有办法知道哪个连接在哪里,哪个不在哪里。@asemprini87虽然正确,但我不建议任何人在本世纪使用隐式连接,因为显式连接是ANSI-SQL的一部分已经有20多年了……我不是说有人应该使用它。我只是说这不是加入的唯一方式。当我第一次在遗留数据库上看到它时,我觉得。。。“这到底是什么?”。如果你开始研究这个问题,最好知道你可能会发现什么,更确切地说,逗号分隔的表列表是一个交叉连接。当添加where谓词以过滤不匹配的行时,它的行为类似于内部联接。