我创建了两个表,T1和T2,每个表都有一个列,分别是abc和xyz。我在每个表中插入了2行(数值1和2)。
当我运行命令"select abc from t2"时,它会抛出一个错误,说明表T2中不存在列abc。但是,当我运行命令"delete from t1 where abc in (SELECT abc from t2);"时,将删除2行。
删除不应该失败,因为我使用了在子查询中失败的相同语句吗?
创建表t1 (abc编号);--表创建
创建表t2 (xyz编号);--表创建
插入t1值(1);--插入的一行
插入t1值(2);--插入的一行
插入t2值(
我有两个表,一个表只有id列,第二个表有id和source列。
我正在尝试根据ID在表1和表2之间创建一个匹配,如果source等于1。我希望将该id的状态作为' match‘返回,如果source为0,我希望该id状态为'not match’。
DECLARE @T1 AS TABLE (
id int
)
DECLARE @T2 AS TABLE (
id int,
source int
)
INSERT INTO @T1 VALUES
(1),
(2),
(3),
(4),
(5)
INSERT INTO @T2 VALUES
(1,
下面将从我想要插入到或更新现有元组的引用表t2中获取t1中的值
SELECT
id, col1
FROM
t2
LEFT OUTER JOIN
t1
ON
t2.id=t1.id
如果id的元组已经存在于t1中,那么应该用从t2中选择的值来更新它。如果id的元组不存在于t1中,则应插入(id, col1),并将其他列设置为默认值。
如何有效地做到这一点?
假设我有四个连续排列的列作为数据框架的一部分,我想用另一个值(假设为-5)替换这4列中的所有负值,我该如何做呢?
T1 T2 T3 T4
20 -5 4 3
85 -78 34 21
-45 22 31 75
-6 5 7 -28
从逻辑上讲,我希望这能奏效。但是,事实并非如此。
for i in df.iloc[:,df.columns.get_loc("T1"):df.columns.get_loc("T1")+4]<0:
for j in df[i]:
if j<0:
我们正在做一个项目,将图像加载到一个表中,并给它们一个项目编号,图像大小,图像链接。现在,我们需要将该表与inventory表合并。inventory表每件商品可以有10张不同的图片,但在image表中只有3行。此表中有多个项目编号,每个项目编号具有不同的图像和大小。我们如何使用来自table2的链接更新table1,并让它们填写全部10张图片?
update table1
if (imglink is not null)
set
imgsize1 = c.imagesize,
imglink1= c.imageLink
else if (imglink1 is not
当列、xID、和ID的值相等时,我需要在相同的表中更新行。
这是一个例子:
mysql> SELECT
Euro,
ALMACEN,
Imagen,
xID,
ID
FROM
`tbl_g`
WHERE
xID IN (2025)
OR ID IN (2025);
+--------+----------+--------+------+------+
| Euro | ALMACEN | Imagen | xID | ID |
+--------+----------+--------+------+------+
|
我有一个PL/SQL存储过程,它在3个不同的表中搜索一行(并非所有列都相同)。
逻辑如下:
搜索第一个表中的项目,如果找到了项目,则从第一个表中选择它的详细信息,如果找不到第二个表中的项,则搜索第二个表中的项,如果没有找到第二个表,选择它的详细信息,从第三个表中选择项目(如果在这里也找不到,则返回空白)
下面是实际代码(为安全性而修改的实际符号名称):
PROCEDURE GETREQUEST(REQUESTID IN NUMBER, request OUT pkg_request.refcur)
IS
requestFound NUMBER := 0;
BEGIN
我有两个蜂巢表T1和T2。T1是由date1,hour1列划分的外部表。它还有一个名为date2 (不同于date1)的日期列。
T2是一个由date2分区的单元表。
我将每小时递增地获取数据,并且可以轻松地将其添加到带有动态分区的表T1中。
我希望找到一种从T1中选择数据并将数据增量加载到由date2分区的T2中的有效方法。
这就是我现在要做的
insert into T2
select
*,
date2
from
(
select * from T1 where date1="a constant date" and hour1 =
我有两个具有相同列的表- T1,T2。我想根据键列从T2中存在的列更新表T1列:如果键列存在,则从T2更新T1的其余列,如果不存在,则将整行从T2插入到T1。
此查询不能完成以下工作:
IF EXISTS (SELECT keyC FROM T2 WHERE keyC in (select keyC from T1))
UPDATE T1 SET T1.c1 = T2.c1,
T1.c2 = T2.c2,
from T2 WHERE T2.keyC in (select keyC from T1)
ELSE (INSERT INTO T1 select * from T2)
你知道怎么修
我有一个有4列的表:EmployeeID, Date, StartTime, EndTime。前两列不可为空,而其他两列则为空。
我想要生成一个报告,并用前面行的AVG值填充缺失的StartTime和EndTime。对于StartTime列,我使用以下语句:
ISNULL([StartTime], DATEADD(SECOND, AVG([dbo].[GetTimeInSecondsFromDateTime]([StartTime])) OVER (PARTITION BY [EmployeeID] ORDER BY [Date]), [Date]))
问题是,当我一个接一个地有2个空值时,它
我有两张桌子:
列A是我们将接受联接的列。我需要更新如下:
B = if(D not null) then D
else C
我试过这个:
update Tab1 x
set B = case when
(select D from Tab2 t2
inner join Tab1 t1
on t1.A = t2.A
where t1.A = x.A) is not null
then (select D from Tab2 t2
inner join Tab1 t1
on t1.A = t2.A
此的下面一行显示了如何根据结束字符进行匹配。
select * from table where Name like '%es'
如果我想匹配多个值,我如何修改代码。例如,我有另一个具有列C1的表T2,并且我希望列Name中的所有值都以列C1中的值结尾
如果我想查找C1中的所有名称,我将使用
select * from table where Name in (select C1 from T2)
在类似的线路上,我想要如下所示的内容。这是一个伪代码
select * from table where Name like (select '%C1' fro
我一直在使用以下SQL:
SELECT DISTINCT NAME
FROM Events t1
LEFT JOIN UserHistory t2 ON t1.Name = t2.Event
WHERE t2.Event IS NULL
从表1中选择所有行,其中表2为空。这有效地过滤掉了表2有数据的所有表1数据。但是,仅当表2中的列等于某个值时,我才想应用该方法。因此,我希望做一个SELECT * FROM t2 WHERE t2.ID = 1,但不确定这如何适合这个查询。
也许我的做法是完全错误的,在这种情况下,您可以自由地指出一个更好的解决整体问题的方法,即“如何使用中间表进行将来的查询?”
假设我有表foo和bar,它们连接在一些baz_id上,我希望将它们合并到中间表中,以便输入到后续的查询中。我知道WITH .. AS (...)语句,但遇到了这样的问题:
WITH foobar AS (
SELECT *
FROM foo
INNER JOIN bar ON bar.baz_id = foo.baz_id
)
SELECT
baz_id
-- some other things as well
FROM