2015-06-29 55 views
0

有一個表,如:MySQL的多個凡在同一列的關係數據庫

pTable_tags: 

| id | tag | id_pTable 
| 1 | tag1 |  1 
| 2 | tag2 |  1 

pTable: 

| id | value | 
| 1 | x | 

我怎樣才能做一個SELECT在同一時間得到pTableWHERE tag = tag1 and tag = tag2
注意:我不能使用OR,因爲它必須滿足這兩個條件。

+2

'where'在行級別工作。它不會掃描行,所以你想要的是不可能的。單個記錄中的單個字段不能同時具有多個不同的值。所以是的,你需要'或'(或者''in''),並且只返回滿足這兩個條件的記錄,例如'count count(*).... have count(*)= 2'。 –

+0

@MarcB,我認爲你的評論可能值得張貼爲答案,我認爲這正是OP所期待的。 – AdamMc331

回答

0

您可以使用下面的查詢:

SELECT p1.id, value 
FROM pTable AS p1 
JOIN pTable_tags AS p2 ON p1.id = p2.id_pTable 
WHERE tag IN ('tag1', 'tag2') 
GROUP BY p1.id, value 
HAVING COUNT(DISTINCT(tag)) = 2 

這是假設idpTable獨一無二的。如果id不是唯一的,並且您希望選中pTable的所有行,則可以將pTable加回到上述查詢生成的派生表中。

Demo here