MySQL-すべてのIN値に一致するが、1つ以上のテーブルにあるレコードを選択する方法

ジェルマー・ケイジ

良い日、私はこれを行う方法を理解できないようです。まず、データベースモデルについて説明します。

User (user_id, name)
Job (job_id, name)
UserTopJob (user_id, job_id)
UserOtherJob(user_id, job_id)

ユーザーは自分が一番好きなトップジョブを設定できます。これらの値は、user_idとjob_idによってUserTopJobに保存されます。ユーザーは、好きな他のジョブをUserOtherJobに設定することもできます。

さて、私がやりたいのは、私の求人検索入力に一致するユーザーをクエリすることです。たとえば、検索入力はjob_id 1と2です。ここで、job_id1とjob_id2の両方に一致するユーザーをクエリしたいのですが、ユーザーがトップまたは他のジョブに属しているか、それらの間で分割されているかは関係ありません。 2つのテーブル。

したがって、次の場合はユーザーを返す必要があります。

  • job_id1と2の両方が上位のジョブにあります
  • job_id1と2の両方が他のジョブにあります
  • それらはjob_id1と2の両方を持っていますが、異なるテーブルにあります

入力IDの数は増える可能性があり、制限はありません。常にすべての入力値と一致する必要があります。編集:たとえば、job_ids 1と2と3をクエリに入れる場合、ID 1と2と3は、そのユーザーの最上位または他のテーブルにある必要があります。

誰かが私がこれを行うことができ、db-performanceにあまり圧力をかけないMySQLクエリを作成するのを手伝ってくれませんか?

ここで私を助けてくれてありがとう!

ジェルマー・ケイジ

了解しました。これは今夜のブレインバスターでした。しばらくこれをいじってみて、これを思いついたのですが、うまくいくようです。

SELECT user_id, SUM(matched) AS totalMatched FROM
(
    SELECT uoj.user_id, COUNT(uoj.job_id) AS matched FROM userOtherJob AS uoj 
    INNER JOIN user AS u ON u.user_id = uoj.user_id
    WHERE uoj.job_id IN (1,2)
    GROUP BY u.user_id

UNION ALL

    SELECT utj.user_id, COUNT(utj.job_id) AS matched FROM userTopJob AS utj 
    INNER JOIN user AS u ON u.user_id = utj.user_id
    WHERE utj.job_id IN (1,2)
    GROUP BY u.user_id
) AS t

GROUP BY user_id
HAVING totalMatched = 2

このクエリは、「other」テーブルの一致をカウントし、その後、「top」テーブルの一致をカウントして、両方のテーブルの合計を合計します。したがって、一致の総数(上位とその他を合わせたもの)は、探しているジョブの数と同じ値である必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

MySQL:結合されたテーブルがすべての値に一致するレコードを選択します

分類Dev

他のテーブルに一致する値がない行でMySQL選択を最適化する方法

分類Dev

MySQLを使用して、一致する値の次の1つのレコードを選択します

分類Dev

MySQLを使用して、連続するRowIDのない一致する値の後に次の1つのレコードを選択します

分類Dev

Mysql列の値がXとYの両方ではない1つのテーブルからすべてのレコードを選択する方法

分類Dev

MySql-1つの行が結果と一致するときに、同じフィールドを持つすべてのレコードを選択する

分類Dev

MYSQL:複数の値が1つの列に少なくとも2回一致するテーブルからIDを選択します

分類Dev

少なくとも1つの行がMySQLの条件に一致する場合、すべてのグループレコードを取得します

分類Dev

MySQL結合ステートメントを使用して、リンクテーブルの複数の値に一致するレコードを選択するにはどうすればよいですか?

分類Dev

一致するすべてのレコードがフラグが設定されている場合にのみ、別のMySQLのテーブル内のレコードを削除する方法

分類Dev

MySQL:1つのGROUP BYレベルから値を選択し、すべてのレベルにブロードキャストする方法

分類Dev

MySQL左結合:1つのテーブルからすべてを選択しますが、2番目のテーブルの値と条件が一致するだけです

分類Dev

MySQL。正規表現テンプレートに一致するテーブルからすべてを選択するか、何も選択しない

分類Dev

mysql-テーブルに一致するものがある場合は、テーブルの最初の行を選択します

分類Dev

1つのレコードなしでテーブルからすべての値を表示する方法MySQL

分類Dev

MySQL-一致基準の後にn個の連続するレコードがあるすべてのレコードを返します

分類Dev

MYSQL:1つのテーブルのすべての行を、別のテーブルの一致する行の合計とともに返します

分類Dev

日時フィールドに分を追加してから、mysqlで一致するものをすべて選択する方法は?

分類Dev

両方のテーブルに1つの共通IDがあるmysqlのtable1とtable2からすべての結果を選択します

分類Dev

以前の 1 つのレコードと一緒に mysql からレコードを選択する方法

分類Dev

PHPで2つのテーブルを結合する方法-2番目のテーブルのIDと一致し、テーブル1に特定のレコードを表示するMySQL?

分類Dev

MYSQL現在のストレージ製品に一致する注文製品を見つける方法(100%一致する2つのテーブルを比較)

分類Dev

秒が一致する場合、mysqlは2つのテーブルから情報を選択します

分類Dev

MYSQL:組み合わせに一致するテーブルからすべての行を選択し、その逆

分類Dev

MySQLはテーブルからすべての一致を返し、IDが別のテーブルにあるかどうかを示します

分類Dev

PHP MySQLは、一致するすべての行を選択し、別のテーブル行をエコーします

分類Dev

Mysql:日付または日付間で1つの列のみに一致する5つの異なるテーブルから選択します

分類Dev

MySQL関連テーブルの複数の行に一致する行を選択します

分類Dev

PHP MySQL1つのクエリで複数の異なる値に一致するレコードを取得する方法

Related 関連記事

  1. 1

    MySQL:結合されたテーブルがすべての値に一致するレコードを選択します

  2. 2

    他のテーブルに一致する値がない行でMySQL選択を最適化する方法

  3. 3

    MySQLを使用して、一致する値の次の1つのレコードを選択します

  4. 4

    MySQLを使用して、連続するRowIDのない一致する値の後に次の1つのレコードを選択します

  5. 5

    Mysql列の値がXとYの両方ではない1つのテーブルからすべてのレコードを選択する方法

  6. 6

    MySql-1つの行が結果と一致するときに、同じフィールドを持つすべてのレコードを選択する

  7. 7

    MYSQL:複数の値が1つの列に少なくとも2回一致するテーブルからIDを選択します

  8. 8

    少なくとも1つの行がMySQLの条件に一致する場合、すべてのグループレコードを取得します

  9. 9

    MySQL結合ステートメントを使用して、リンクテーブルの複数の値に一致するレコードを選択するにはどうすればよいですか?

  10. 10

    一致するすべてのレコードがフラグが設定されている場合にのみ、別のMySQLのテーブル内のレコードを削除する方法

  11. 11

    MySQL:1つのGROUP BYレベルから値を選択し、すべてのレベルにブロードキャストする方法

  12. 12

    MySQL左結合:1つのテーブルからすべてを選択しますが、2番目のテーブルの値と条件が一致するだけです

  13. 13

    MySQL。正規表現テンプレートに一致するテーブルからすべてを選択するか、何も選択しない

  14. 14

    mysql-テーブルに一致するものがある場合は、テーブルの最初の行を選択します

  15. 15

    1つのレコードなしでテーブルからすべての値を表示する方法MySQL

  16. 16

    MySQL-一致基準の後にn個の連続するレコードがあるすべてのレコードを返します

  17. 17

    MYSQL:1つのテーブルのすべての行を、別のテーブルの一致する行の合計とともに返します

  18. 18

    日時フィールドに分を追加してから、mysqlで一致するものをすべて選択する方法は?

  19. 19

    両方のテーブルに1つの共通IDがあるmysqlのtable1とtable2からすべての結果を選択します

  20. 20

    以前の 1 つのレコードと一緒に mysql からレコードを選択する方法

  21. 21

    PHPで2つのテーブルを結合する方法-2番目のテーブルのIDと一致し、テーブル1に特定のレコードを表示するMySQL?

  22. 22

    MYSQL現在のストレージ製品に一致する注文製品を見つける方法(100%一致する2つのテーブルを比較)

  23. 23

    秒が一致する場合、mysqlは2つのテーブルから情報を選択します

  24. 24

    MYSQL:組み合わせに一致するテーブルからすべての行を選択し、その逆

  25. 25

    MySQLはテーブルからすべての一致を返し、IDが別のテーブルにあるかどうかを示します

  26. 26

    PHP MySQLは、一致するすべての行を選択し、別のテーブル行をエコーします

  27. 27

    Mysql:日付または日付間で1つの列のみに一致する5つの異なるテーブルから選択します

  28. 28

    MySQL関連テーブルの複数の行に一致する行を選択します

  29. 29

    PHP MySQL1つのクエリで複数の異なる値に一致するレコードを取得する方法

ホットタグ

アーカイブ