我希望从三个独立的无关表中返回一个包含四个字段的tsql语句。
一张桌子包含一个对象列表,比如水果,每个水果,我想要一个卖出购买日期和最好的日期。
因此,第一个陈述看起来像:
select fruit from fruit table -- this returns multiple rows
第二个陈述看起来像:
select sellbuyDate from sellTable -- this returns a single row
,第三个看起来像:
select bestbefore from bestTable -- this returns a single row
不要挂在桌面名称上。我正在研究遗留系统,我们无法改变,因此需要将这三个表合并为一个。
下划线表需要在一行中返回所有字段,第二个和第三个结果应用于第一个语句。
苹果| 12-12-2008 | 2009年12月12日
梨子| 12-12-2008 | 2009年12月12日
我已经实现了以下临时表:
CREATE TABLE #Fruits
(
Fruit VARCHAR(100),
SellBuyDate DATETIME,
BestBefore DATETIME
)
INSERT INTO #Fruits
SELECT Fruit from fruit
INSERT INTO #Fruits
SELECT sellbuyDate from sellTable
INSERT INTO #Fruits
SELECT bestbefore from bestable
SELECT * from #Fruits
这会引发错误,因为每个插入都不包含指定的三个字段。
任何其他建议都会很受欢迎。
答案 0 :(得分:1)
也许你正在寻找这个答案,虽然你的问题可以更清楚地说明会取得什么成就
INSERT INTO #Fruits(fruit)
SELECT Fruit from fruit
INSERT INTO #Fruits(sellbuyDate)
SELECT sellbuyDate from sellTable
INSERT INTO #Fruits(bestbefore)
SELECT bestbefore from bestable
SELECT * from #Fruits
另一种可能的解决方案是
insert into #Fruits
select Fruit, sellbuyDate, bestbefore from fruit
cross join sellTable
cross join bestable
答案 1 :(得分:1)
您可以通过执行CROSS JOIN
一起选择它们,方法是不指定三个表之间的任何连接条件,如下所示:
CREATE TABLE fruit ( fruit_name VARCHAR(30) ); CREATE TABLE sellTable ( sellByDate DATETIME ); CREATE TABLE bestTable ( bestBefore DATETIME ); CREATE TABLE allFruits ( fruit_name VARCHAR(30), sellByDate DATETIME, bestBefore DATETIME ); INSERT INTO fruit (fruit_name) VALUES ('apple'), ('pear'); INSERT INTO sellTable(sellByDate) VALUES ('12/05/2012'); INSERT INTO bestTable(bestBefore) VALUES ('12/12/2012'); INSERT INTO allFruits (fruit_name, bestBefore, sellByDate) SELECT f.fruit_name, b.bestBefore, s.sellByDate FROM fruit f, bestTable b, sellTable s; SELECT * FROM allFruits;
答案 2 :(得分:0)
可能你需要这个。
SELECT FRUIT,
(SELECT SELLBUYDATE FROM SELLTABLE) AS SELLBUYDATE,
(SELECT BESTBEFORE FROM BESTTABLE) AS BESTBEFORE
FROM FRUIT
或
SELECT FRUIT.FRUIT
, SELLTABLE.SELLBUYDATE
, BESTTABLE.BESTBEFORE
FROM FRUIT
INNER JOIN SELLTABLE ON 1=1
INNER JOIN BESTTABLE ON 1=1
答案 3 :(得分:-1)
没有3个表的架构。我猜其中的一个。
CREATE TABLE #Fruits
(
Fruit VARCHAR(100),
SellBuyDate DATETIME,
BestBefore DATETIME
)
INSERT INTO #Fruits(Fruit,SellBuyDate,BestBefore)
Select Fruit, Sellbuydate,bestbefore
from fruit,selltable,bestable
或者如果您的表格设置正确
INSERT INTO #Fruits(Fruit,SellBuyDate,BestBefore)
Select Fruit, Sellbuydate,bestbefore
from fruit f
inner join selltable s
on f.pkey = s.fkey
inner join bestable b
on f.pkey = b.fkey