从同一个表

时间:2018-04-07 22:11:07

标签: mysql sql

以下是一个名为pages

的示例表
id  page_name    page_alias   lang
1   pagina1        pagina1     es
2   pagina2        pagina2     es
3   page1          pagina1     en
4   page2          pagina2     en

我知道page_name = pagina1,来源lang = es和目的地lang = en

因此,基于page_name和source lang,我需要获取此条目以及另一个目标为lang的条目,其中别名与第一个结果相同

我试过这个但不行(只获得第一个条目)

SELECT A.* FROM pages AS A
JOIN pages AS B
ON
B.page_alias = A.page_alias AND B.lang = 'en'   
WHERE A.page_name = 'pagina1' AND A.lang = 'es'

预期查询结果(两行):

1   pagina1        pagina1     es
3   page1          pagina1     en

它需要一个UNION,但我不知道如何将第一个查询中的page_alias用于UNION查询

2 个答案:

答案 0 :(得分:3)

使用IN运算符:

select *
from pages
where page_alias in (
    select page_alias
    from pages
    where page_name = 'pagina1' and lang = 'es'
    )
and lang in ('en', 'es')

SqlFiddle.

答案 1 :(得分:1)

如果您搜索的列是EN上的ES,为什么需要使用UNION。改为使用IN子句。

这是一个演示:http://sqlfiddle.com/#!9/15afd1/8

SELECT DISTINCT A.*
FROM pages AS A
JOIN pages AS B
ON B.page_alias = A.page_alias 
 AND B.page_name = 'pagina1'
WHERE A.lang in ('es', 'en')