SQL Left加入,然后另一个Join加入结果

时间:2018-04-18 04:03:36

标签: sql

我想弄清楚这个问题。

我需要在查询中加入大约4个表。 我有另一个Left联接,看看这些项是否在另一个表中关联,然后我需要对该结果进行JOIN以查看与之关联的广告系列。

问题在于某些交易有广告系列,有些则没有。

public class MainPage
{
    private UIBindingProperties viewModel = new UIBindingProperties();

    public MainPage()
    {
        BindingContext = viewModel;
    }

    public void SomeMethodInvokedLater()
    {
        viewModel.COBRO = "Completely different value than the initial one";
    }
}

目标是,如果广告系列名称与广告系列相关联,或者只是一个空广告符号,则返回该广告系列名称。

我无法想出这个。 感谢。

2 个答案:

答案 0 :(得分:0)

尝试使用像这样的子查询 -

SELECT 
a.Applications, 
a.Clicks, 
isnull(a.Datacaptures,0) as Datacaptures, 
a.Aggration_day, 
a.MediaUsed_id, 
a.mediatrackingid_fk, 
a.tracking_type, 
t.Tracking_info, 
m.MediaName, 
DATEPART(dayofyear, Aggration_day) AS DayofYear, 
c.Title as Campaigntitle, 
c.campaign_id, 
i.title, 
i.start_date, 
i.end_date, 
i.IO_number 
FROM Aggeration_day a 
JOIN tracking_types t 
ON a.tracking_type = t.Tracking_type_id 
JOIN MediaUsed m 
ON m.media_used_id = a.MediaUsed_id 
JOIN MediaTrackingItems i 
ON a.mediatrackingid_fk = i.mediatrackingid 
LEFT join (
           Select ci.mediatrackingid, 
                  c.Campaign_Id, 
                  c.campaigntitle 
           FROM Campaign_items CI 
           JOIN Campaigns c 
           ON CI.campaign_id_fk = c.campaign_id
           ) ci 
ON a.mediatrackingid_fk = CI.mediatrackingid_FK

答案 1 :(得分:0)

最简单的方法是"继续"使用左连接到任何依赖于原始左连接的表(参见下面的查询1)。

你也可以"筑巢"加入,虽然这不常用,并且在复杂查询中很难遵循(参见下面的查询2)。在此方法中,内部联接到广告系列在应用左连接条件之前形成派生表,这些条件已放置在内部联接之后(是,令人困惑!)。

或者你可以形成自己的派生表"通过使用子查询,并加入该子查询(请参阅下面的查询3)。这比使用查询2中看到的嵌套连接更容易理解。

查看在SQL Fiddle

运行的这些查询

架构设置

CREATE TABLE Campaigns     (`id` int, `Title` varchar(14));
INSERT INTO Campaigns     (`id`, `Title`)
VALUES    (1, 'First Campaign')
;

CREATE TABLE Campaign_items    (`id` int, `campaign_id` int, `media_fk` int);
INSERT INTO Campaign_items     (`id`, `campaign_id`, `media_fk`)
VALUES
  (201, 1, 3001),
  (202, 1, 4001)
;

CREATE TABLE Media     (`media_id` int);
INSERT INTO Media     (`media_id`)
VALUES
    (3001),
    (4001),
    (5001)
;

查询1

select
      a.media_id, ci.campaign_id, c.Title
from media a
left join Campaign_items ci on a.media_id = ci.media_fk
left join Campaigns c on ci.campaign_id = c.id

<强> Results

| media_id | campaign_id |          Title |
|----------|-------------|----------------|
|     3001 |           1 | First Campaign |
|     4001 |           1 | First Campaign |
|     5001 |      (null) |         (null) |

查询2

select
      a.media_id, ci.campaign_id, c.Title
from media a
left join Campaign_items ci 
      inner join Campaigns c on ci.campaign_id = c.id
      on a.media_id = ci.media_fk

<强> Results

| media_id | campaign_id |          Title |
|----------|-------------|----------------|
|     3001 |           1 | First Campaign |
|     4001 |           1 | First Campaign |
|     5001 |      (null) |         (null) |

查询3

select
      a.media_id, ci.campaign_id, ci.Title
from media a
left join (
    select ci.*, c.title
    from Campaign_items ci
    inner join Campaigns c on ci.campaign_id = c.id
    ) ci on a.media_id = ci.media_fk

<强> Results

| media_id | campaign_id |          Title |
|----------|-------------|----------------|
|     3001 |           1 | First Campaign |
|     4001 |           1 | First Campaign |
|     5001 |      (null) |         (null) |