作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要进行良好的 SQL 查询,但需要一些帮助...
表A
1 "aaa" "STATUS_OK"
2 "bbb" "STATUS_OK"
3 "ccc" "STATUS_OK"
4 "ddd" "STATUS_NOT_OK"
表B
1 "Addtional Data1" 1/9/2015 2 (foregin Key = TableA.ID)
2 "Addtional Data2" 2/9/2015 2 (foregin Key = TableA.ID)
3 "Addtional Data3" 3/9/2015 2 (foregin Key = TableA.ID)
4 "Addtional Data4" 4/9/2015 2 (foregin Key = TableA.ID)
因此表 A 的 2 个“bbb”实体在表 B 中有 4 个附加数据
这里我想从表 A 中提取行
“STATUS_OK”
我想了一天。我熟悉基本的 SQL 语法,但这让我很困难。
有人可以帮我进行这个查询吗?
我可以通过在表 A 中添加“更新时间”来解决问题,但这个解决方案并不是那么可取......
<小时/>如果我用简单的 SQL 来实现这种情况,
CREATE TABLE table_A(
ID int NOT NULL,
NAME VARCHAR(20),
STATUS VARCHAR(20),
PRIMARY KEY(ID)
);
CREATE TABLE table_B(
ID int NOT NULL,
DATA VARCHAR(20),
CREATEDATE DATE,
A_ID int,
PRIMARY KEY(ID),
FOREIGN KEY (A_ID) REFERENCES table_A(ID)
);
最佳答案
一种选择是使用 NOT EXISTS
来执行此操作:
SELECT ID,NAME,[STATUS]
FROM table_A a
WHERE a.[STATUS] = 'STATUS_OK'
AND NOT EXISTS
(SELECT TOP 1 1
FROM table_B b
WHERE b.A_ID = a.ID
AND DATEDIFF(WEEK,b.CREATEDATE,GETDATE())<=2)
编辑:这是使用LEFT JOIN
的另一个版本:
SELECT a.ID, a.NAME, a.[STATUS]
FROM table_A a
LEFT JOIN table_B b ON a.ID = b.A_ID
AND DATEDIFF(WEEK,b.CREATEDATE,GETDATE())<=2
WHERE a.[STATUS] = 'STATUS_OK'
AND b.A_ID IS NULL
编辑2:使用子查询也可以。在小型表上,这 3 个查询没有区别。如果您针对数百万条记录运行它,您必须检查哪一个最适合您:
SELECT ID,NAME,[STATUS]
FROM table_A a
WHERE a.[STATUS] = 'STATUS_OK'
AND a.ID NOT IN
(SELECT b.A_ID
FROM table_B b
WHERE DATEDIFF(WEEK,b.CREATEDATE,GETDATE())<=2)
关于mysql - 数据查询(通过外键连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33407759/
我有 2 个表,它们的第一列都是 PRIMARY,这也是自动递增的。第一个表有 67 个条目,从 1 到 67,第二个表有 48 个条目。它们都有相同的列。我想从 Table2 中获取内容并将它们插入
我是一名优秀的程序员,十分优秀!