簡體   English   中英

如何將表與INNER JOIN進行比較並返回true?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM