关于mysql中两个表的复杂SELECT逻辑

时间:2015-01-25 01:28:14

标签: mysql

我有两个包含以下架构的表

表1

field1 | FIELD2

表2

field2 |字段3

我想做的是以下内容:

获取 field2 AND field3 FROM table2如果没有table1.field2 = table2.field2 AND table1.field ='x'

演练中:

表1

field1 | FIELD2

1 |东西

1 | somethingelse

2 |另一

表2

field2 |字段3

又是另一个to_get

在这个例子中,我想得到'又一个'和'to_get'因为table2中没有字段field2 = 又一个而查询中我的'x'这是问题,我将检索我想要的信息的2倍,因为table1 中有两次field1 ='1'。所以,我的查询将另一个,to_get;而另一个,to_get ,因为重复。我尝试使用DISTINCTLIMIT,但这不起作用,因为它应用于table2中的字段,而不是table1中的字段。因此,如果我在table1中有3行 field1 = 1 distinctlimit将“擦除”其中一行并检索两个又一个,to_get;还有,to_get 。如果我有10行,其中field1 ='1',它将检索9次另一个,to_get 。如果有一行“field1 ='1'”和“field2 ='yetanother'”那么我希望查询不返回任何内容(因为field2是共同的)。我怎样才能做到这一点?我不知道这实际上是否容易或困难,但我真的觉得我在这里失踪并弄乱了一些我忘记了......

2 个答案:

答案 0 :(得分:0)

试试这个同性恋

SELECT DISTINCT *             /* select all */
FROM table1 t1, table2 t2     /* from these 2 tables */
WHERE t1.field2 <> t2.field2  /* where t1 field1 != t2  field1 */
AND t1.field1 = 'x';          /* and t1.field 1 is X */

让我知道它是否适合你。

答案 1 :(得分:0)

只需使用not exists

select t2.*
from table2 t2
where not exists (select 1
                  from table1 t1
                  where t1.field2 = t2.field2 and t1.field = 'x'
                 );