Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
VLOOKUP的SQL版本_Sql_Join_Lookup_Vlookup - Fatal编程技术网

VLOOKUP的SQL版本

VLOOKUP的SQL版本,sql,join,lookup,vlookup,Sql,Join,Lookup,Vlookup,我是SQL新手,如果您有空,我想知道是否有人可以帮我复制SQL中的ExcelVlookup函数 从一些研究中,我怀疑这是我需要的join函数之一,但是,我不想只选择两个表中包含的数据-我只想对照另一个表查找一个表中的值 如果数据包含在查找表中,则返回值,如果不包含,则只返回NULL 我在下面给出了几个示例表来帮助说明我的问题 请注意,产品“C”和“D”不在表2中,但它们仍在结果表中,但值为空 此外,我有大量独特的产品,所以我不是在寻找一个答案,其中包括硬编码,例如当[产品]=“A”时的情况,然后

我是SQL新手,如果您有空,我想知道是否有人可以帮我复制SQL中的Excel
Vlookup
函数

从一些研究中,我怀疑这是我需要的
join
函数之一,但是,我不想只选择两个表中包含的数据-我只想对照另一个表查找一个表中的值

如果数据包含在查找表中,则返回值,如果不包含,则只返回
NULL

我在下面给出了几个示例表来帮助说明我的问题

请注意,产品“C”和“D”不在表2中,但它们仍在结果表中,但值为空

此外,我有大量独特的产品,所以我不是在寻找一个答案,其中包括硬编码,例如<代码>当[产品]=“A”时的情况,然后…



表1

Product    Quantity
-------------------
A          10
B          41
D          2
C          5
B          16
A          19
C          17
A          21
表2

Product    Cost
-----------------
A          £31.45
B          £97.23


结果表

Product   Quantity    Cost
-----------------------------
A         10          £31.45
B         41          £97.23
D         2           NULL
C         5           NULL
B         16          £97.23
A         19          £31.45
C         17          NULL
A         21          £31.45

看起来您需要外部联接,在我的示例中,我将使用左侧联接:

select t1.Product, t1.Quantity, t2.Cost
from table1 as t1
left outer join table2 as t2
    on t1.Product = t2.Product
您也可以省略外部关键字:

select t1.Product, t1.Quantity, t2.Cost
from table1 as t1
left join table2 as t2
    on t1.Product = t2.Product

这是Lennart答案的最新版本,非常有效

select *
from table1 as t1
left outer join table2 as t2
    on t1.Product = t2.Product
    and t2.Product <> ''
left outer join table3 as t3
    on t1.Product = t3.Product2
    and t3.Product2 <> ''
选择*
从表1中取t1
左外连接表2为t2
关于t1.Product=t2.Product
及t2.产品「
左外连接表3为t3
在t1.Product=t3.Product2上
和t3.2“
关键是,您需要排除join table列为空的行,否则返回的行将比table1的多。真正的vlookup不会向左表中添加任何行


我甚至还添加了第三个表以起作用。

“我想知道是否有人可以帮助我在SQL中复制Excel Vlookup函数?”=您肯定可以尝试一下吗?如果您希望它正常工作,您需要添加和t2.Product“”,否则您可能会得到比您要求的更多的记录。因为如果“匹配”列中存在重复项,则联接可能会重复。@user890332,我不确定您的建议会阻止什么情况发生,您能详细说明一下吗?实际上我的编辑不清楚。我的意思是,如果右表中有重复的行,左外联接将不会返回左表中的行。如果您需要一个精确的计数(这是我所需要的),那么您需要找到一种方法来缩小范围,使每个联接只返回一行。使用distinct(或group by)?问一个新问题,没有任何细节就很难回答。包括CREATETABLE和insert语句,用于说明问题的示例数据。是否需要第三个表?如果是的话,你会在里面放什么?