Gibt es eine Möglichkeit (ohne JOIN), die WHERE
-Klausel für 2 Spalten (OR) IN
einer Unterabfrage zu verwenden? Derzeit mache ich das
WHERE 'col1' IN
(
SELECT id FROM table
) OR 'col2' IN
(
SELECT id FROM table
)
Und ich bin sicher, ich kann es besser machen :). Ich habe auch WHERE ('col1', 'col2') IN <subquery>
versucht, aber MySQL sagt: Operand should contain 2 column(s)
Danke für Ihre Hilfe.
Edit: Mit "No join", ich meine, ich mache schon viele Joins: http://Pastebin.com/bRfD21W9 , und wie Sie sehen, befinden sich die Unterabfragen auf einer anderen Tabelle.
Ich habe gelesen, dass Sie nicht mit JOIN
einverstanden sind, sondern nur eine andere Möglichkeit, dies zu tun. Sehen Sie join
mit friends
, ob es für Sie nützlich ist.
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`;
Da Sie inner join
verwenden, können Sie dies auch tun, um die Bedingung für das vollständige ErgebnisSet zu vermeiden.
JOIN `friends` f on ((f.`idol_id`=u1.`id` or f.`idol_id`=u2.`id`) and f.idol_id = ?)
Sie können entweder DISTINCT
oder GROUP BY
verwenden, um ein eindeutiges Ergebnis zu erhalten.
SELECT *
FROM table
WHERE
(col_1, col_2) NOT IN
(SELECT col_1, col_2 FROM table)
Schreiben Sie Ihren Code so um, und Sie können loslegen:
WHERE ('col1', 'col2') IN
(
SELECT id, id FROM table
)
manurajhada Antwort ist gut. Wenn Sie sich trotzdem entscheiden, den JOIN zu vermeiden, könnten Sie:
SELECT ... FROM (SELECT id FROM table) subquery, other_table
WHERE other_table.col1 = subquery.id OR other_table.col2 = subquery.id
Dadurch sollte MySQL den Join-Puffer verwenden, um die Ergebnisse der Unterabfrage zu speichern.
Ich habe auch ein ähnliches Problem
SELECT COUNT(*) FROM msg_old WHERE idfrom IN
(SELECT olduserid FROM temp_user)
OR
idto IN (SELECT olduserid FROM temp_user)
Ich habe eine Lösung gefunden
SELECT * FROM msg_old
INNER JOIN temp_user
ON msg_old.IDFROM = temp_user.olduserid
OR msg_old.IDTO = temp_user.olduserid
Sie können unter Abfrage versuchen:
select name from user_details where groupid IN ( select g_id from user_groups ) OR cityid IN ( select c_id from user_cities );
Ich hoffe das hilft.