Создайте таблицу, объединяющую две таблицы, устанавливающие значения по умолчанию, если значение отсутствует, используя предложение WHERE - PullRequest
0 голосов
/ 11 декабря 2018

Я хочу создать временную таблицу, содержащую оценку местоположения для некоторых слов на некоторых страницах.

В sqlite у меня есть 2 таблицы, страницы и расположения слов:

pages
-------
|url|
|example.com|
|example2.com|
|example3.com|

и:

wordlocations
-------
|    url     |wordid|location|
|example.com |     1|       2|
|example.com |     1|      35|
|example.com2|     1|       0|
|example.com2|     1|      75|
|example.com3|     2|      75|

И я хочу создать таблицу, содержащую URL, наименьшую оценку местоположения, а если слово отсутствует => установить оценку местоположения на 10000. Поэтому в приведенном ниже примере, когда я хочу создатьтаблица для wordid = 1, я хочу, чтобы она выглядела примерно так:

result
-------
|    url     |min(location)|
|example.com |            2|
|example2.com|            0|
|example3.com|       100000|

Я пробовал с CREATE TEMPORARY TABLE result AS SELECT url, IFNULL(MIN(location), 100000) FROM wordlocation WHERE wordid = 1 GROUP BY url;

Но это не учитывало страницы, на которых отсутствовало слово idid.то есть

result
-------
|    url     |min(location)|
|example.com |            2|
|example2.com|            0|

Как мне получить такую ​​таблицу, которая содержит все страницы с наименьшей оценкой местоположения, и при этом сохранить страницы, не содержащие словосочетания, значением по умолчанию?

1 Ответ

0 голосов
/ 11 декабря 2018

Отметьте это, используя UNION, чтобы объединить 2 случая:

CREATE TEMPORARY TABLE result AS  
    SELECT url, MIN(location) AS minlocation
    FROM wordlocations 
    WHERE wordid = 1
    GROUP BY url
    UNION
    SELECT url, 100000 AS minlocation
    FROM wordlocations 
    WHERE wordid <> 1
    GROUP BY url;

Редактировать , 2-я версия:

CREATE TEMPORARY TABLE result AS  
    SELECT url, MIN(location) AS minlocation
    FROM wordlocations 
    WHERE wordid = 1
    GROUP BY url
    UNION
    SELECT url, 100000 AS minlocation
    FROM wordlocations 
    WHERE url NOT IN (SELECT DISTINCT url FROM wordlocations WHERE wordid = 1)
    GROUP BY url;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...