tablas tabla que para libreria inner hacer espaƱol ejemplo crear con biblioteca sql join

sql - tabla - para que es la libreria pandas



Escritura de consultas SQL JOIN (5)

Intento escribir una consulta simple que involucre dos tablas. La tabla "persona" tiene un person_id único y un name , y la tabla "friends" tiene un person_id y un friend_id que es un FK a un person_id en la tabla de personas.

person: <PK> int person_id varchar[45] name friends: <PK> int person_id <PK> int friend_id

Quiero seleccionar el nombre de todos los amigos de la persona 1.

Puedo hacer esto fácilmente usando una declaración IN :

SELECT p.name FROM person p WHERE p.person_id IN (SELECT f.friend_id FROM friends f WHERE f.person_id = 1);

Sin embargo, no soy competente escribiendo declaraciones de JOIN . ¿Alguien puede ayudarme a escribir la unión equivalente?

Claramente, este es un ejemplo artificial, pero lo he intentado con mis datos reales y, conceptualmente, me falta algo. Gracias.


Estoy bastante seguro de que Tony Andrews lo hizo bien, excepto que creo que la sintaxis correcta pone la tabla fuente a la izquierda y la tabla unida a la derecha ...

SELECT p.name FROM person p INNER JOIN friends f ON p.person_id = f.friend_id WHERE f.person_id = 1

Esto devolverá el campo [person.name] de todos los registros donde el valor [person.person_id] se encuentre en el campo [friends.friend_id] Y los campos [friends.person_id] iguales a 1. ... todos los que sean amigos de [1] existirá en la tabla de personas filtradas cuando estén unidas y se limite a friends.person_id=[1]


Quieres algo como esto:

SELECT p.name, f.friend_id FROM person AS p INNER JOIN friends AS f ON p.person_id = f.person_id WHERE p.person_id = 1

Esto une las dos tablas usando p.person_id = f.person_id

Si una persona no tiene amigos, no recibirá ninguna fila; si no quiere esto, utilice LEFT JOIN y obtendrá una fila con NULL friend_id .

Editar: si quieres volver a unirte a tus amigos:

SELECT p.name AS person_name, friend.name AS friend_name FROM person AS p -- Our person INNER JOIN friends AS f ON p.person_id = f.person_id -- the join table INNER JOIN person AS friend on f.friend_id = friend.id -- Join back on person again WHERE p.person_id = 1

Tal vez necesites una unión de 3 vías como esta para tu aplicación, pero más generalmente solo necesitarías una de 2 vías como la anterior, o algo así:

SELECT p.name, f.friend_id FROM person AS p INNER JOIN friends AS f ON p.person_id = f.friend_id WHERE f.person_id = 1

Esto le dará los nombres de todas las personas que son amigos con person_id 1 (pero no el nombre de person_id 1)


SELECT p.name FROM person p INNER JOIN friends f ON f.friend_id = p.person_id WHERE f.person_id = 1;


select p.name, p2.name as friend_name, from person p inner join friends f on p.person_id = f.person_id inner join person p2 on f.friend_id = p2.person_id -- friends where p.person_id = <your criteria>


select p.name from person p, friends f where f.friend_id = p.person_id and f.person_id = 1