Tengo una base de datos con dos tablas, una tabla (tiendas) tiene una columna de usuario administrador y la otra un usuario con menos privilegios. Planeo UNIRME A LA IZQUIERDA a la tabla del usuario con menos privilegios. Cuando recupero los datos, los registros para el usuario administrador deben estar en una fila separada y deben tener valores NULOS para la tabla unida a la izquierda seguidos de registros de usuarios con menos privilegios (registros de la tabla unida a la izquierda), si corresponde. Estoy usando MySQL.
He investigado los comandos UNION pero no creo que pueda ayudar. Por favor, vea los resultados a continuación de lo que necesito.
Gracias.
SELECT * FROM shops LEFT JOIN users USING(shop_id) WHERE shop_id = 1 AND (admin_id = 1 OR user_id = 1); +---------+----------+---------+ | shop_id | admin_id | user_id | +---------+----------+---------+ | 1 | 1 | NULL | <-- Need this one extra record | 1 | 1 | 1 | | 1 | 1 | 2 | | 1 | 1 | 3 | +---------+----------+---------+Aquí hay una estructura de ejemplo de las bases de datos y algunos datos de muestra:
CREATE SCHEMA test DEFAULT CHARACTER SET utf8 ; USE test; CREATE TABLE admin( admin_id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(admin_id) ); CREATE TABLE shops( shop_id INT NOT NULL AUTO_INCREMENT, admin_id INT NOT NULL, PRIMARY KEY(shop_id), CONSTRAINT fk_shop_admin FOREIGN KEY(admin_id) REFERENCES admin (admin_id) ); CREATE TABLE users( user_id INT NOT NULL AUTO_INCREMENT, shop_id INT NOT NULL, CONSTRAINT fk_user_shop FOREIGN KEY(shop_id) REFERENCES admin (shop_id) ); -- Sample data INSERT INTO admin() VALUES (); INSERT INTO shops(admin_id) VALUES (1); INSERT INTO users(shop_id) VALUES (1),(1),(1);Creo que necesitas union all :
select s.shop_id, s.admin_id, null as user_id from shops s where s.shop_id = 1 union all select s.shop_id, s.admin_id, u.user_id from shops s join users u on s.shop_id = u.shop_id where shop_id = 1;Ponga su where condition en la On clause
SELECT * FROM shops LEFT JOIN users on shops.shop_id=users.shop_id and (admin_id = 1 OR user_id = 1) WHERE shops.shop_id = 1