2017-10-17 4 views
-3
/* Create a table called tbl1 */ 
CREATE TABLE tbl1(id integer PRIMARY KEY, name text, lang text); 

/* Create few records in this table */ 
INSERT INTO tbl1 VALUES(1,'John', 'Perl'); 
INSERT INTO tbl1 VALUES(2,'Pete', 'Perl'); 
INSERT INTO tbl1 VALUES(3,'Sam', 'Java'); 
INSERT INTO tbl1 VALUES(4,'John', 'Php'); 
INSERT INTO tbl1 VALUES(5,'Sam', 'Perl'); 
INSERT INTO tbl1 VALUES(6,'Sam', 'Php'); 
INSERT INTO tbl1 VALUES(7,'Pete', 'C'); 
INSERT INTO tbl1 VALUES(8,'Bob', 'Java'); 

Comment faire une requête sql (postgresql)? Déduire le nom de ceux qui connaissent Perl et Php.

+0

Avez-vous essayé quelque chose? –

+1

Tout d'abord, normaliser vos données ... –

+1

il y aura environ 20-30 réponses viables à ce pivot de semi-hacky. Cela semble être un devoir, vous devriez probablement essayer d'apprendre une réponse à cela. – Twelfth

Répondre

0

L'OP contenait très peu d'informations. Est-ce ce dont vous avez besoin?

SELECT Name 
FROM tbl1 
WHERE lang = 'Perl' AND lang = 'Php' 

Pour référence future; vous devriez vraiment fournir un exemple de travail minimal, comme vous l'avez fait ici, mais aussi ce que vous avez réellement essayé, ce qui vous manquait.

Si cette requête est ce dont vous avez besoin, alors elle est très simple et votre problème aurait dû être gérable simplement en recherchant quelques minutes.

+0

Non, cette requête renvoie 0 lignes – Max

+0

Doit renvoyer les noms 'Sam' et 'John'. – Max

+0

'lang = 'Perl' AND lang = 'Php'' ne peut jamais être vrai –

0
SELECT distinct(name) 
FROM tbl1 
WHERE name IN (SELECT name FROM tbl1 WHERE lang = 'Perl') 
    AND name IN (SELECT name FROM tbl1 WHERE lang = 'Php'); 

Est-ce une bonne réponse? Je ne pense pas. Je veux trouver un meilleur moyen.

2 réponses supplémentaires

SELECT n FROM (
    SELECT tbl1.name, string_agg(tbl1.lang, '-') 
    FROM tbl1 
    GROUP BY name) AS t (n, l) 
WHERE 
    position('Perl' in l) <> 0 
AND 
    position('Php' in l) <> 0; 

de ===================================

SELECT t1.name FROM (
    SELECT name FROM tbl1 WHERE lang = 'Perl' 
) AS t1, (
    SELECT name FROM tbl1 WHERE lang = 'Php' 
) AS t2 
WHERE t1.name = t2.name;