我正在尝试编写一个查询,该查询从没有其他表数据的表中检索数据。
我有带值的表A
ID StudentID CLASSID
1 1 2
2 2 3
3 3 4
4 4 5
表B有值
ID StudentID CLASSID
1 1 2
2 2 3
我试图从表A返回ID为3,4的值,表B中没有该值。
我尝试过的查询是
SELECT * FROM A AS a WHERE NOT EXISTS ( SELECT
我的第一篇文章是关于如何比较两个表中的值并返回差异列表的帮助
这是通过VBA在excel中完成的,我尝试了几种不同的方法,如完全连接和联合,但不能让它运行。
基本场景如下:
Table A has 2 columns,
Column 1 = ID
Column 2 = Qty
表B中完全相同的设置
我想要做的是收集一个列表,其中数量不同或没有出现在这两个表中
例如:
Table A has
ID 1
Qty 3
Table B has
ID 1
Qty 2
所以它会带回其中一个记录
或
Table A has ID 5 and Table B doesn&
我有两张桌子。一个来自昨天(300 k行),另一个来自今天,具有相同的行数,但某些列中的数据会发生变化。
这两个表大约有120列。
如何只更新更改。
我试过使用delete:
delete from tableA
where id in (select id from tableB)
但太慢了。
也试过
update tableA inner join tableB
on tableA.id=TableB.id
但没成功。
当3个表(表A、表B和表C)中的每个表中都存在一个或多个行时,下面所示的查询工作并返回所有行。
但是,当一个已连接的表(特别是我的例子中的表C)没有行时,查询就会失败,什么也不返回。
在表B或表C可能没有任何行的情况下,我需要下面的查询。
$query_string = '
SELECT tableA.*,
GROUP_CONCAT(DISTINCT tableB.tbID ORDER BY tableB.sortOrder) AS tbID,
GROUP_CONCAT(DISTINCT tableC.tcID ORDER BY tableC.sortOrder)
我有一个web应用程序,它使用一个非常复杂的数据库视图来检索一些数据,这些数据似乎非常慢,只需要3分钟就可以完成。经过彻底的调查,我找到了问题的原因。在我的代码中,我在WHERE子句中使用了以下条件来仅检索连接表的最后一个元素:
SELECT ...
FROM MY_TABLE
JOIN TABLE_JOIN_XX tableA on ....
..lots of other joins ...
WHERE
tableA.id =
(SELECT MAX (id) FROM TABLE_JOIN_XX tableB WHERE tableA.id_parent = tableB.id
我现在有个问题。我需要根据这个条件从表B中更新表A:
如果表A中的一个记录为null,则为。)然后从表B中更新该记录
这是我的错误驱动脚本,我从我的脑海中思考。这就是我想要的。
UPDATE TableA
SET
NAME =
(
CASE WHEN TableA.NAME IS NULL THEN
SELECT TableB.NAME
FROM TableB
WHERE TableB._ID = 1
),
ADDRESS =
(
我想用ColumnX在TableB中的ColumnY值更新TableA的ColumnY。
这两个表具有共同的属性id。是否可能,当我尝试更新代码时,我会得到
子查询返回多行
子查询如下所示:
UPDATE TableA
SET ColumnX = (SELECT ColumnY FROM TableB WHERE tableA.id=tableA.id);
我正在使用oracle 11g。我想知道为什么这两个问题给出了不同的答案?
它们在逻辑上是相同的:
select * from tableA where
exists (select * from tableB where tableA.ID != tableB.ID);
select * from tableA where
not exists (select * from tableB where tableA.ID = tableB.ID);
在第一个例子中,我选择了所有不存在的东西。
在第二个例子中,我没有选择所有存在的东西。
注意("exist“
我需要一个查询,如果表A中的值X与表B中相应行的值Y的总和不同,则返回表A中的行。问题是,表B中可能存在或不存在与表A中的行相对应的行,但如果表B中没有行,则仍应返回表A中的行(因为表B中没有匹配值)。因此,它类似于左外连接场景,但额外的复杂性是将比较作为额外的选择标准。
我有一个与之相反的查询,即。如果表A中的值与表B中的行的值相同,则返回行,但遗憾的是,这不是我需要的!
SELECT TableA.id, TableA.bdate
FROM TableA
LEFT JOIN TableB ON TableB.ID = TableA.id
WHERE TableA.select_field
下面的代码运行良好,但速度太慢。我只需要知道表B中有匹配的记录,那么有什么窍门吗?
(奇怪的是,相反的搜索:查找未连接的记录(IS NULL)非常快)
SELECT
TableA.id
FROM
TableA
LEFT JOIN
TableB
ON
TableB.TableA_id = TableA.id
WHERE
TableB.id IS NOT NULL and TableA.clientid=13 ;
Clientid现在已被索引,但正是这个子句极大地将查询速度从非常快减慢到几分钟。
(03年5月12日)我现在已经在一个功能更强大的服务器上的相同数
我有两张MySQL桌子。
TableA
ID Total
01 0
02 0
03 0
...
99 0
TableB
ID Name Points Year
01 Joe 4 2013
01 Bill 2 2013
02 Sam 10 2013
02 Barb 1 2013
02 Joan 7 2013
...
15 Fred 0 2013
15 Jan 3 2013
...
我希望将来自基于ID的Table B的MAX(Points)值存储在Table A的Total列中
我有一个可以得到MAX(Points)的M
我正在尝试实现批量删除。我在网上找到了这段代码:
DECLARE @rowcount int = 1
WHILE (@rowcount != 0 ) BEGIN
DELETE T1
FROM (SELECT TOP (50) * FROM Orders WHERE OrderCity = @city) T1
SELECT @rowcount = @@ROWCOUNT
END
我们的想法是删除@city中的所有订单
它似乎工作得很好,但在我的现实中,我需要delete from Orders where OrderCity in (select ID from Some