2015-11-22 83 views
2

我有这两个表:SQL查询新手问题

表1

Itemid  Username   Rate  Opinion  
0944947  pooh_sweety_70  3.2   Negative 
0468569  pooh_sweety_70     Positive 
0411008  liamvdheuvel  2.1   Negative 
0468569  liamvdheuvel  3.4   Negative 
1375666  liamvdheuvel  1.5   Negative 
0903747  liamvdheuvel  5.5   Negative 
0412142  rzajac    4.8   Negative 
2267998  rzajac    9.2   Positive 
1074638  rzajac    7.4   Positive 
1182345  rzajac    6.1   Negative 
0468569  rzajac    3.3   Negative 
1856010  michaelsmith01  9.9   Positive 
1486217  michaelsmith01     Positive 
1300854  michaelsmith01  2.4   Negative 
2267998  pooh_sweety_70  8.4   Positive 
2911666  aswilliams40  8.7   Positive 
1074638  aswilliams40  9.4   Positive 
0468569  aswilliams40  8.2   Positive 

表2

Username   Password 
aswilliams40  pantsftw 
liamvdheuvel  qwascoolzuiop 
michaelsmith01  ilovejessica 
rzajac    toocoolforscool 
pooh_sweety_70  legendarymythic 

而且我想找到其密码包含单词“酷”的用户某个地方,并且该用户还必须始终对项目留下否定意见,如果他们对该项目进行了评级。未分级的项目不重要。

我试图把查询在一起,但它并没有真正的工作:/

SELECT Username FROM Table1, Table2 
    WHERE Table1.Username = Table2.Username AND 
    Table2.Password LIKE '%cool%' AND 
    Table1.Rate IS NOT NULL AND 
    Table1.Opinion = 'Negative'; 

所以基本上我唯一想要的输出是“liamvdheuvel”

+1

做什么你的意思是不起作用? –

+0

'WHERE Table2.Username = Table2.Username AND'?将一个表更改为Table1 – c4pricorn

+0

它给出了以下错误:字段列表中的列'用户名'不明确 –

回答

1
SELECT Table2.Username 
FROM Table1, 
     Table2 
WHERE Table1.Username = Table2.Username 
     AND Table2.Password LIKE '%cool%' 
     AND Table1.Rate IS NOT NULL 
     AND Table1.Opinion = 'Negative'; 

的问题是,你没有指定你想要的表,以获得 '用户名'。

如果你不想得到重复的用户名,添加DISTINCT

SELECT DISTINCT Table2.Username 
FROM Table1, 
     Table2 
WHERE Table1.Username = Table2.Username 
     AND Table2.Password LIKE '%cool%' 
     AND Table1.Rate IS NOT NULL 
     AND Table1.Opinion = 'Negative'; 

如果你不希望有消极和积极的意见的用户,试试这个:

SELECT DISTINCT Table2.Username 
FROM Table1, 
     Table2 
WHERE Table1.Username = Table2.Username 
     AND Table2.Password LIKE '%cool%' 
     AND Table1.Rate IS NOT NULL 
     AND Table1.Opinion = 'Negative' 
     AND Table2.Username NOT IN (SELECT Table1.Username 
            FROM Table1 
            WHERE Table1.Opinion = 'Positive'); 
+1

感谢您的评论!我试过了,这个;它运行!但并不如预期的输出,查询返回:liamvdheuvel liamvdheuvel liamvdheuvel liamvdheuvel rzajac rzajac rzajac 而预期输出是:liamvdheuvel –

+0

好吧,我知道为什么你的是,我会改变我的答案 –

+0

@ aurellb和rzajac也满足了这个查询,因为他在密码和负数中都有“酷”。 –

1
SELECT DISTINCT Table1.Username 
FROM Table1 
LEFT JOIN Table2 
ON table1.Username=table2.Username 
Where 
Table2.Password LIKE '%cool%' AND 
Table1.Rate IS NOT NULL AND 
Table1.Opinion = 'Negative'; 

为了优化你需要删除来自table1的用户名(为此表提供一个适当的名称并将用户ID添加到table2中(将其正确命名))。

Table2 
------ 

UserId **Username**   **Password** 
1   aswilliams40  pantsftw 
2   liamvdheuvel  qwascoolzuiop 
3   michaelsmith01  ilovejessica 
4   rzajac    toocoolforscool 
5   pooh_sweety_70  legendarymythic 

表1

**Itemid**  **UserID**   **Rate**  **Opinion**  
    0944947  5       3.2   Negative 
    0468569  5          Positive 
    0411008  2      2.1   Negative 
+0

感谢您的支持评论,但这仍然给我带来的错误: 字段列表中的'用户名'含糊不清 –

+0

@aurellb尝试用我回答的查询 –

+0

@aurell再次检查 –