Mysql

計算一個表中存在的 id 數,該表中未針對特定使用者顯示在另一個表中

  • December 15, 2017

我有兩個表我想計算第一個顯示的 id 的數量,這不是第二個相對於使用者 id 我該怎麼做?

例如。

情況1

表格1。

|id|data           |User_id
|4 |Some data      |12
|5 |Another data   |8
|6 |Some other data|6  

表2

|id|table1Id|userId|
|1 |4       |12    |
|2 |5       |14    |
|3 |12      |12    |

案例2

表格1。

|id|data           |userid
|4 |Some data      |12
|5 |Another data   |24
|6 |Some other data|32
|7 |Some more data |12

表2

|id|table1Id|userId|
|1 |4       |12    |
|2 |5       |14    |
|3 |12      |12    |

我想做的是這個。

我想知道 table1 中有多少 id 出現在使用者 12 的 table2 中。

我怎樣才能做到這一點?

情況 1 它應該返回 0

Case2 它應該返回 1

你可以通過使用得到它**NOT EXISTS**

第一個例子:

create table table1 (id int, data varchar(100), user_id int);
insert into table1 values (4, 'some data', 12);
insert into table1 values (5, 'another data', 8);
insert into table1 values (6, 'some another data', 6);
create table table2 (id int, tableid int, user_id int);
insert into table2 values (1, 4, 12);
insert into table2 values (2, 5, 14);
insert into table2 values (3, 12, 12);
SELECT count(*) coincidences
FROM   table1
WHERE  user_id = 12
AND    NOT EXISTS (SELECT 1
                   FROM   table2
                   WHERE  tableid = table1.id
                   AND    user_id = table1.user_id);
| 巧合|
| -----------: |
| 0 |

dbfiddle在這裡

第二個例子:

create table table1 (id int, data varchar(100), user_id int);
insert into table1 values (4, 'some data', 12);
insert into table1 values (5, 'another data', 24);
insert into table1 values (6, 'some another data', 32);
insert into table1 values (7, 'some more data', 12);
create table table2 (id int, tableid int, user_id int);
insert into table2 values (1, 4, 12);
insert into table2 values (2, 5, 14);
insert into table2 values (3, 12, 12);
SELECT count(*) coincidences
FROM   table1
WHERE  user_id = 12
AND    NOT EXISTS (SELECT 1
                   FROM   table2
                   WHERE  tableid = table1.id
                   AND    user_id = table1.user_id)
| 巧合|
| -----------: |
| 1 |

dbfiddle在這裡

引用自:https://dba.stackexchange.com/questions/193119