0

今、私は参加を始めたばかりなので、おそらくそれについてのコアな理解が欠けていますが、これが私がやりたいことです:

プロファイルを含むテーブルと、profile_id、いくつかの無関係なデータ、およびvalue_id(1対1の関係)を含むいくつかのテーブル(役割、スキル、役職など)があります。

ユーザーはさまざまなvalue_idの配列を入力し、ユーザーから取得したものと一致するvalue_idを持つ対応するテーブルを持つすべてのプロファイルのIDを取得したいと思います。

入力の一部の値は、特定のテーブル(この場合は役割と業界)とのみ一致するように指定されており、その部分は現在機能しています。しかし、私ができなかったことは、関連するテーブルのいずれかに一致するものがあるかどうかを確認することでした。


このSQLブロックのスタイルを設定する方法がわかりません。ごめん。編集:それはそれ自身をスタイリングしました。きちんとした。
この例では、3つの値があります。1つ(88)は特定の役割を検索するために指定され、1つは業界(128)用であり、3つ目(73)はテーブルのセットの少なくとも1つの行と一致する必要があります。

SELECT DISTINCT(profiles.id) as id,  
FROM profiles  
INNER JOIN profile_experience_roles r ON(r.profile_id = profiles.id)  
INNER JOIN profile_experience_industries i ON(i.profile_id = profiles.id)  
INNER JOIN profile_experience_technology t ON(t.profile_id = profiles.id)  
INNER JOIN profile_wanted_roles w ON(w.profile_id = profiles.id)  
INNER JOIN profile_languages l ON(l.profile_id = profiles.id)   
WHERE r.value_id = 88 AND i.value_id = 128 AND  
(r.value_id = 73 OR i.value_id = 73 OR t.value_id = 73 OR w.value_id = 73 OR l.value_id = 73)

最後の行は、問題の原因です。どんな助けでも大歓迎です。

また、これまでここに投稿したことがないので、何をしているのかわかりません。
ありがとう

4

2 に答える 2

1

で試してみてください

WHERE r.value_id = 88 AND i.value_id = 128 AND 
73 IN (r.value_id, i.value_id, t.value_id, w.value_id, l.value_id)

あなたの場合、あなたは一緒に行くことができるはずです

WHERE r.value_id = 88 AND i.value_id = 128 AND 
73 IN (t.value_id, w.value_id, l.value_id)

r.value_id8873になることはできません。同じi.value_idことが12873になることはできません。

行をフェッチするには、これらすべてのテーブルINNER JOIN間の接続が必要であることに注意してください。

于 2012-09-06T14:10:35.360 に答える
1

結合の違いの良い例は次のとおりです。「INNERJOIN」と「OUTERJOIN」の違いは何ですか?

内部結合が原因である可能性があります。存在しないIDで参加している可能性があり、すべてのデータが返されていません。また、ロビンがINについて行った変更と、r.valueおよびi.valueの削除も含めました。

これを試して:

SELECT 
    DISTINCT(profiles.id) as id,  
FROM profiles  
RIGHT JOIN profile_experience_roles r ON(r.profile_id = profiles.id)  
RIGHT JOIN profile_experience_industries i ON(i.profile_id = profiles.id)  
RIGHT JOIN profile_experience_technology t ON(t.profile_id = profiles.id)  
RIGHT JOIN profile_wanted_roles w ON(w.profile_id = profiles.id)  
INNER JOIN profile_languages l ON(l.profile_id = profiles.id)   
WHERE profiles.id is not null AND r.value_id = 88 AND i.value_id = 128 AND 
    73 IN (t.value_id, w.value_id, l.value_id)
于 2012-09-06T14:21:00.140 に答える