2009-11-24 7 views
0

C'est ma requête en cours:Requête Mysql, sélectionnez 2 bases de données avec 4 tables + SELECT imbriqué?

$sel = "SELECT 
     db1t1.userid, db1t1.customer_id, db2t1.customers_id, db2t1.orders_id, db2t2.products_price 
    FROM 
     database1.table1 db1t1 
     LEFT JOIN database2.table1 db2t1 ON 
      db1t1.customer_id = db2t1.customers_id 
     LEFT JOIN database2.table2 db2t2 ON 
      db2t1.orders_id = db2t2.orders_id 
    WHERE db1t1.userid IN(
     SELECT 
      l.userid, l.username, r.username, r.cus_id 
     FROM 
      database1.table3 l 
      LEFT JOIN database2.table4 r ON 
       l.username = r.username 
     WHERE r.cus_id = '1234' 
     )"; 

Message d'erreur:

Opérande doit contenir 1 colonne (s)

Répondre

0

L'erreur est survenue parce que vous êtes retourné un résultat avec plusieurs colonnes à une clause IN.

Essayez ceci:

SELECT 
    `db1t1`.`userid`, `db1t1`.`customer_id`, `db2t1`.`customers_id`, 
    `db2t1`.`orders_id`, `db2t2`.`products_price` 
FROM `database1`.`table1` AS `db1t1` 
    LEFT JOIN `database2`.`table1` AS `db2t1` 
     USING (`customers_id`) 
    LEFT JOIN `database2`.`table2` AS `db2t2` 
     USING (`orders_id`) 
WHERE `db1t1`.`userid` IN (
    SELECT `l`.`userid` 
    FROM `database1`.`table3` AS `l` 
     LEFT JOIN `database2`.`table4` AS `r` 
      USING (`username`) 
    WHERE `r`.`cus_id` = 1234 
) 

Qu'est-ce que vous essayez d'atteindre? Peut-être que nous pouvons trouver une meilleure solution.

Aussi, je pense que vous devriez faire un INNER JOIN au lieu d'un LEFT JOIN dans la sous-requête.

+0

Eh bien merci, je résous mon problème après avoir lu la requête. – mysqllearner

Questions connexes