MYSQL如何将外部计算的值输入到行中

时间:2014-10-05 15:07:20

标签: mysql select where

我对此MySQL查询存在一些问题。我有两张桌子,其中有一张桌子,上面列出了所有#34;反对党领袖"(当选的人选)以及他们当选的日期。而且我还有另一张桌子,上面列出了他们结婚的所有人,以及他们结婚的那一年。

我试图提出一个查询,以便在他们的约会时间和他们当前的配偶姓名,在他们结婚的时间和结婚日期之前,将所有被反对的领导人都归还。

以下是一位领导者的一些练习数据,日期有所改变,以适应我试图解决的问题。

表一:

Leader_of_Opposition ------当选日期

Beazley K C,1996-03-19

Beazley K C,2005-01-28

表二:

Leader_of_Opposition ----配偶的名字----结婚年

Beazley K C,Mary Ciccarelli,1974

Beazley K C,Susie Annus,2004

-

我试图让它达到这样的目的:

Leader_of_Opposition ------当选日期------配偶的名字--------结婚年

Beazley K C,1996-03-19,Mary Ciccarelli,1974

Beazley K C,2005-01-28,Susie Annus,2004

-

到目前为止,我已经掌握了以下基础知识:

SELECT opposition.leader_name,opposition.time_begin,opposition_marriage.spouse_name,opposition_marriage.year_married'

来自反对派,反对派婚姻

AND opposition.leader_name = opposition_marriage.leader_name

ORDER BY opposition.time_begin

但是它给了我结果,每个婚姻都会多次提到领导者。我无法找出搜索其他表的语法,然后将该值放入行中。

任何帮助都会非常感激,现在已经暂时对抗这个问题了。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

我认为这对于相关子查询来说是最简单的。但是,您的表格中没有每行的唯一标识符。

SELECT o.leader_name, o.time_begin,
       (select om.spouse_name
        from opposition_marriage om
        where o.leader_name = om.leader_name and om.year_married <= year(o.date_elected)
        order by om.year_married desc
        limit 1
       ) as spouse_name,
       (select om.year_married
        from opposition_marriage om
        where o.leader_name = om.leader_name and om.year_married <= year(o.date_elected)
        order by om.year_married desc
        limit 1
       ) as year_married
FROM opposition o
ORDER BY o.time_begin;

这可以处理任意数量的婚姻。

现在有些评论:

  • 只有反对派领导人的婚姻而不是所有政治家的婚礼似乎很奇怪。
  • 粒度处于&#34; year&#34;的水平,所以在他/她上任后的同一年结婚的领导人被视为与该配偶结婚。
  • 你没有婚姻结束日期&#34;所以离婚或丧偶的伴侣在下一次婚姻之前将被认为是最新的。
  • 正如我在开头提到的那样,每行应该有一个唯一的标识符。