[英]Select data from MySQL tables
我有2個名為table_one
和table_two
表,具有以下屬性:
column_id
公共列。 table_one.column_id
的值是唯一的,而table_two.column_id
的值不是唯一的。 table_two
有兩個額外的列,分別稱為ts_one
和ts_two
。 ts_one
不為null,但ts_two
可以為null。 每個table_two.column_id
僅一行,允許ts_two
值為null。 table_one.column_id
所有值都可以顯示在table_two.column_id
。 例如:
table_one
column_id
1
2
3
4
5
table_two
column_id ts_one ts_two
2 2014-10-01 null
3 2014-10-02 2014-10-03
3 2014-10-05 null
4 2014-10-01 2014-10-05
我需要從table_one.column_id
獲取所有ID,其中:
table_one.column_id
id而不是table_two.column_id中的id(1、5滿足該要求) table_one.column_id
和在table_two.column_id
其中ts_two
不為空並且存在與相同ID NO另一行,其中ts_two
用空值- (僅4滿足)。 兩種情況都應考慮在內。 結果應包括1、4和5。
對於您的第一個問題“ id在table_one.column_id中而不在table_two.column_id(1,5)中”
這個查詢應該做
SELECT column_id
FROM table_one AS o
WHERE NOT EXISTS (SELECT 1 FROM table_two WHERE column_id = o.column_id)
對於第二個問題“ table_one.column_id和table_two.column_id中的id,其中ts_two不為null且不存在具有null值的id-(僅4個)”
這個查詢也應該
SELECT t.* FROM table_two AS t
INNER JOIN table_one AS o ON o.column_id = t.column_id
WHERE t.ts_two IS NOT NULL AND NOT EXISTS (SELECT 1 FROM table_two WHERE ts_two IS NULL AND column_id = o.column_id)
這個問題是如此令人困惑。 但是從下面的評論中,這應該可以為您提供所需的東西
SELECT DISTINCT column_id
FROM (
SELECT column_id
FROM table_one AS o
WHERE NOT EXISTS (SELECT 1 FROM table_two WHERE column_id = o.column_id)
UNION
SELECT t.column_id FROM table_two AS t
INNER JOIN table_one AS o ON o.column_id = t.column_id
WHERE t.ts_two IS NOT NULL AND NOT EXISTS (SELECT 1 FROM table_two WHERE ts_two IS NULL AND column_id = o.column_id)
) AS t
更新的小提琴: http ://sqlfiddle.com/#!2/0b39d2/15/0
SELECT *
FROM Table_one A
LEFT JOIN Table_Two B
on A.Column_ID = B.ColumN_ID
LEFT JOIN (Select column_ID
From table_two
where ts_one is null or ts_two is null) C
ON A.ColumN_Id = C.Column_ID
WHERE C.Column_ID is null
OR B.Column_ID is Null;
這是做什么的:
您可以通過單個聯接和聚合來完成此操作。
SELECT t1.column_id FROM table_one AS t1
LEFT JOIN (
SELECT column_id, (COUNT(column_id) = COUNT(ts_two)) as no_nulls FROM table_two
GROUP BY column_id
) AS t2
ON t1.column_id = t2.column_id
WHERE t2.column_id IS NULL OR (t2.column_id IS NOT NULL AND t2.no_nulls = TRUE)
SQLFiddle: http ://sqlfiddle.com/#!2/14855/8/0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.