[英]How to compare tables with INNER JOIN and return true?
我這里有一張桌子:
activation
+--------+----------------+
| id | activation_code|
+--------+----------------+
| 0001 | 00111 |
| 0002 | 00110 |
| 0003 | 00100 |
+--------+----------------+
和另一張表:
device
+--------+--------------+
| id |activation_id |
+--------+--------------+
| 12121| 0001 |
| 12122| 0002 |
| 12123| 0003 |
| 12124| 0004 |
| 12125| 0005 |
+--------+--------------+
如何獲取兩個表並比較device.activation_id == activation.id
我想單獨列出這些設備,請參閱示例:
devices
+--------+----------+
| active |inactive |
+--------+----------+
| 12121| 12124 |
| 12122| 12125 |
| 12123| |
| | |
| | |
+--------+----------+
如何使用PHP在內部聯接中使用非常高效的解決方案?
我有一個解決方案,但它不是很好:
foreach ($device_query as $res_d) {
foreach ($activation_query as $res_a) {
if ($res_d->activation_id == $res_a->id) {
$is_active = true;
break;
}
else {
$is_active = false;
}
}
}
您可以使用兩個單獨的SQL查詢執行此操作,一個用於獲取活動設備,另一個用於獲取非活動設備,如此。
活性:
SELECT device.id AS active FROM device INNER JOIN activation ON device.activation_id=activation.id
無效:
SELECT device.id AS inactive FROM device WHERE device.activation_id NOT IN (SELECT id FROM activation)
或者,如果要在一個查詢中執行此操作,可以使用以下查詢,並獲取一系列具有每個ID和一個布爾值的行,指示其他表是否匹配。
SELECT device.id, device.activation_id IN (SELECT id FROM activation) AS activated FROM device
編輯:如果您還想獲取激活碼,可以使用以下查詢。 對於沒有激活碼的設備,該列在結果集中將為NULL。
SELECT device.id, activation.activation_code FROM device LEFT OUTER JOIN activation ON device.activation_id=activation.id;
您可以在一個SQL Select中執行此操作,以獲取兩個設備:
select
if(activation_code is not null, d.id, null) as active,
if(activation_code is null, d.id, null) as inactive,
activation_code
from device d
left join activation a
on a.id = d.activation_id
如果您想查看結果: http : //sqlfiddle.com/#!9 / 79abb6 / 13
在MySQL級別執行此操作的最有效方法; 因為數據庫系統在處理數據和處理數據的腳本方面非常有效。
一次性完成它將非常麻煩。
你可能想做這樣的事情。
SELECT d.id from FROM activation as a, device as d WHERE a.id = d.activation_id;
這將獲取所有活動設備的列表,在第二個查詢中,您可以在有活動設備后過濾其余的非活動設備。
select *
from db2 d2
left join db1 d1 on d2.id=d1.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.