Полностью уникальные строки и столбцы в SQL - PullRequest
0 голосов
/ 15 ноября 2018

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

Вот что я кодировал:

SELECT DISTINCT en,dialect,fr FROM words ORDER BY RANDOM() LIMIT 4

Вот некоторые данные:

**en** **dialect** **fr**
number SFA         numero
number TRI         numero
hotel  CAI         hotel
hotel  SFA         hotel

Я хочу:

**en** **dialect** **fr**
number SFA         numero
hotel  CAI         hotel

Некоторые найденные строкибыло бы что-то похожее друг с другом, например, с одинаковым en или одинаковым fr, я хотел бы получить строки, которые не имеют ничего общего друг с другом, как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Вы можете использовать Ранг или найти первую строку для каждой группы, чтобы достичь своего результата,

Проверьте ниже, я надеюсь, что этот код поможет вам

ВЫБРАТЬ «номер» AS Col1, «SFA» AS Col2, «цифра» AS Col3 INTO #tbl СОЮЗ ВСЕХ ВЫБЕРИТЕ «число», «TRI», «цифра» СОЮЗ ВСЕХ ВЫБЕРИТЕ 'hotel', 'CAI', 'hotel' СОЮЗ ВСЕХ ВЫБЕРИТЕ «отель», «SFA», «отель» СОЮЗ ВСЕХ ВЫБЕРИТЕ «Местоположение», «Местоположение A», «Данные о местоположении» СОЮЗ ВСЕХ ВЫБЕРИТЕ «Местоположение», «МестоположениеB», «Данные о местоположении» ; С резюме КАК ( ВЫБЕРИТЕ Col1, Col2, Col3, ROW_NUMBER () OVER (PARTITION BY p.Col1 ORDER BY p.Col2 DESC) AS rk ОТ #tbl р) SELECT s.Col1, s.Col2, s.Col3 ОТ резюме с ГДЕ s.rk = 1

DROP TABLE #tbl

0 голосов
/ 15 ноября 2018

Я думаю, что я сделал бы это в коде переднего конца, а не в дБ, вот псевдокод (не знаю, как выглядит ваш узел):

var seenEn = “en not in (''“;
var seenFr = “fr not in (''“;

var rows =[];

while(rows.length < 4)
{
  var newrow = sqlquery(“SELECT * 
    FROM table WHERE “ + seenEn + “) and ” 
    + seenFr + “) ORDER BY random() LIMIT 1”);
  if(!newrow)
    break;
  rows.push(newrow);
  seenEn += “,‘“+ newrow.en + “‘“;
  seenFr += “,‘“+ newrow.fr + “‘“;
}

Цикл выполняется столько раз, сколько необходимо для извлечения 4 строк (или, возможно, сделать его циклом for, который выполняется 4 раза), если запрос не возвращает значение NULL. Каждый раз, когда запрос возвращает значения, добавляются в список значений, мы не хотим, чтобы запрос возвращался снова. Этот список должен был начинаться с некоторых значений (null), которые никогда не находятся в данных, чтобы предотвратить синтаксическую ошибку при конкатенации строки запятой в переменную seenXX. Этих синтаксических ошибок можно избежать другими способами, такими как логическое значение «если это первое значение, не ставьте запятую», но я решил поместить фиктивные неэффективные значения в sql, чтобы упростить JS. То же самое касается

Как уже отмечалось, JS выглядит, чтобы облегчить ваше понимание, но это следует рассматривать как псевдокод, описывающий общий алгоритм - он никогда не был скомпилирован / выполнен / протестирован и может иметь синтаксические ошибки или вообще не работать как JS, если вставлен в ваш файл; возьмите идею и используйте ее в своем решении

Пожалуйста, обратите внимание, что это было отправлено с iphone, и это могло сделать что-то глупое со всеми апострофами и цитатами (превратило их в курчавый вид, предпочитаемый авторами, а не прямой вид, используемый программистами)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...