27

サブクエリのWHERE2 つの列 (OR) で句を使用する方法 (JOIN なし) はありますか? IN現在、私はやっています

WHERE 'col1' IN
(
    SELECT id FROM table
) OR 'col2' IN
(
    SELECT id FROM table
)

そして、私はもっとうまくやれると確信しています:)。私も試しましWHERE ('col1', 'col2') IN <subquery>たが、MySQLは次のように言っています:Operand should contain 2 column(s)

ご協力いただきありがとうございます。

編集:「結合なし」とは、すでに多くの結合を行っていることを意味します:http://pastebin.com/bRfD21W9、ご覧のとおり、サブクエリは別のテーブルにあります。

4

8 に答える 8

31
SELECT *
FROM table

WHERE 
(col_1, col_2) NOT IN
 (SELECT col_1, col_2 FROM table)
于 2014-04-07T07:24:22.203 に答える
4

コードを次のように書き換えれば、準備完了です。

WHERE ('col1', 'col2') IN
(
    SELECT id, id FROM table
)
于 2012-07-09T10:53:49.757 に答える
3

私はあなたがに同意しないことを読みましJOINたが、それを行うための別の方法です..それがあなたにとって役立つかどうかを見てくださいjoin..friends

SELECT `timeline`.`action`, `timeline`.`data`, `timeline`.`tlupdate`,
            u1.`id` AS ufrom_id, u1.`username` AS ufrom_username, u1.`firstname` AS ufrom_firstname, u1.`lastname` AS ufrom_lastname, u1.`picture` AS ufrom_picture,
            u2.`id` AS uto_id, u2.`username` AS uto_username, u2.`firstname` AS uto_firstname, u2.`lastname` AS uto_lastname, u2.`picture` AS uto_picture,
            m.`id` AS m_id, m.`name` AS m_name, m.`alternative_name` AS m_altname, m.`tiny_img` AS m_tiny, m.`normal_img` AS m_normal
    FROM `timeline`
    JOIN `users` u1 ON u1.`id` = `timeline`.`user_id_from`
    JOIN `users` u2 ON u2.`id` = `timeline`.`user_id_to`
    JOIN `friends` f on f.`idol_id`=u1.`id` or f.`idol_id`=u2.`id`
    JOIN `movies` m ON m.`id` = `timeline`.`movie_id`;

アップデート:

あなたが使用しinner joinているように、完全な結果セットの条件を回避するためにこれもできます。

JOIN `friends` f on ((f.`idol_id`=u1.`id` or f.`idol_id`=u2.`id`) and f.idol_id = ?)

DISTINCT使用するか使用GROUP BYして、一意の結果を得ることができます。

于 2012-07-09T14:23:03.377 に答える
0

以下のクエリを試すことができます:

select name from user_details where groupid IN ( select g_id from user_groups ) OR  cityid IN ( select c_id from user_cities );  

この助けを願っています。

于 2012-07-09T10:58:08.883 に答える
-1

はい、できます。それは十分に簡単です。where句で述べたように、サブクエリで同じ数の列を選択する必要があります。

于 2012-07-09T10:44:38.187 に答える