[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не вошедшие записи
Страницы: 1, 2
Okulo
всем привет.
таблица set столбцы id, itemNumber, setDate
и таблица set_check столбцы id, itemnumber, checkDate

есть запрос который выводит данные из двух таблиц:
SELECT
`set`.*,
set_check.*
FROM `set`,
set_check
WHERE `set`.itemNumber = set_check.itemNumber
есть необходимость, сделать наоборот - показать строки, которые не соответствуют данному запросу. То есть, показать строки где itemNumber одной таблицы, не существует в другой

подскажите как можно сделать

AllesKlar
... left join set_check st on (s.itemNumber = st.itemNumber) where st.id isnull


_____________
[продано копирайтерам]
Okulo
Цитата (AllesKlar @ 5.02.2018 - 13:56)
... left join set_check st on (s.itemNumber = st.itemNumber) where st.id isnull

спасибо.
но что то тут не так :huh:
показываются записи, которых нет в таблице set_check но есть в таблице set
но если в таблице set_check есть еще записи, которые не имеют схожий itemNumber, то они не выводятся
то есть получается, что выводятся не все записи с таблицы set_check
AllesKlar
Цитата (Okulo @ 5.02.2018 - 15:47)
То есть, показать строки где itemNumber одной таблицы, не существует в другой

Цитата (Okulo @ 6.02.2018 - 08:31)
но если в таблице set_check есть еще записи, которые не имеют схожий itemNumber, то они не выводятся


Это значит, что itemNumber - это не внешний ключ ни к одной таблице?
Тогда делай 2 запроса, первый, как я полказал, второй поменять право/лево и объединяй их UNION


_____________
[продано копирайтерам]
Okulo
Цитата (AllesKlar @ 6.02.2018 - 10:43)
Цитата (Okulo @ 5.02.2018 - 15:47)
То есть, показать строки где itemNumber одной таблицы, не существует в другой

Цитата (Okulo @ 6.02.2018 - 08:31)
но если в таблице set_check есть еще записи, которые не имеют схожий itemNumber, то они не выводятся


Это значит, что itemNumber - это не внешний ключ ни к одной таблице?
Тогда делай 2 запроса, первый, как я полказал, второй поменять право/лево и объединяй их UNION

спасибо за советы.

я сейчас рассматриваю вариант сделать одну таблицу, где будет только keyNumber, itemNumber, ststus
статус будет меняться у записей например 0 или 1
но тоже вопрос возник - как вывести записи, у которых нет статуса 1, а только 0?
пример:
keyNumber itemNumber status
001 555 0
001 555 1
002 444 0
003 333 0

тут мне нужно тогда вывести temNumber 444 и 333 так как у них нет статуса 1, но не выводить 555

AllesKlar
Цитата (Okulo @ 6.02.2018 - 14:17)
но тоже вопрос возник - как вывести записи, у которых нет статуса 1, а только 0?

blink.gif where status = 0 ?

_____________
[продано копирайтерам]
Okulo
Цитата (AllesKlar @ 6.02.2018 - 14:06)
Цитата (Okulo @ 6.02.2018 - 14:17)
но тоже вопрос возник - как вывести записи, у которых нет статуса 1, а только 0?

blink.gif where status = 0 ?

biggrin.gif как бы да.
но у записи 555 есть статус 1
AllesKlar
Okulo
То, что ты хочешь сделать, называется битовая маска. В умелых руках вещь очень полезная.
Можно и без нее, составляя дремучие запросы, но с маской будет легче
Каждый бит отвечает за статус. Собираешь маску статусов и простым запросом тянешь все, что ей удовлетворяет, заодно и записи плодиться не будут.
было
001 555 0
001 555 1
002 444 0
003 333 0

стало
001 555 01
002 444 00
003 333 00

Либо озвучь подробно задачу, тебе накидают другую архетектуру таблиц.

_____________
[продано копирайтерам]
Okulo
AllesKlar
я не совсем понял.
а далее как будет?
001 555 010
002 444 001
003 333 000
и т.д.?

боюсь это не совсем то что нужно, так как будет одна запись и не будет понятно, сколько повторений (строк) вообще было
Okulo
в общем сделал вот как:
SELECT * FROM uchet WHERE id IN (SELECT MAX(id) FROM uchet GROUP BY itemNumber) AND register < 2
Okulo
Цитата (AllesKlar @ 6.02.2018 - 15:23)
Okulo
Либо озвучь подробно задачу, тебе накидают другую архетектуру таблиц.

мой последний запрос с >3000 строками уже очень долго думает sad.gif

в общем задача у меня такая:
нужно сначала записывать данные по учету в таблицу (у меня так - keyNumber itemNumber status. где status 1 это приход)
а после, снимать учтенные данные(я делаю новую запись со status 0)
в конце, я должен сравнить сколько было статусов 1 и статусов 0, то есть снятий, и соответственно показать itemNumber тех, которые не снялись

думал может писать в две таблицы - одна приход, другая снятие и сравнивать?
Okulo
приведу еще конкретный пример:
есть таблица, где фиксируется уход и приход сотрудника -
name date status, где статус 1 уход и статус 2 приход.

каждый раз, записывается одна строка, уход или приход с разным статусом.

Как вывести всех людей(записи), которые пришли, но не ушли?
kaww
Цитата (Okulo @ 16.04.2018 - 21:20)
Как вывести всех людей(записи), которые пришли, но не ушли?

SELECT `t1`.*
FROM `uchet` AS `t1`
LEFT JOIN `uchet` AS `t2` ON `t1`.`name`=`t2`.`name` AND DATE(`t1`.`date`)=DATE(`t2`.`date`) AND `t2`.`status`=1
WHERE `t1`.`status`=2 AND `t2`.`name` IS NULL
Okulo
Цитата (kaww @ 16.04.2018 - 23:07)
Цитата (Okulo @ 16.04.2018 - 21:20)
Как вывести всех людей(записи), которые пришли, но не ушли?

SELECT `t1`.*
FROM `uchet` AS `t1`
LEFT JOIN `uchet` AS `t2` ON `t1`.`name`=`t2`.`name` AND DATE(`t1`.`date`)=DATE(`t2`.`date`) AND `t2`.`status`=1
WHERE `t1`.`status`=2 AND `t2`.`name` IS NULL


сори.
в общем после кое какой возни запустил запрос.
8000 строк. висел запрос примерно минуты 3 и выдал ошибку
kaww
Цитата (Okulo @ 17.04.2018 - 15:41)
SELECT `t1`.* - тут мы что выбираем?

Цитата (Okulo @ 16.04.2018 - 21:20)
всех людей(записи), которые пришли, но не ушли

из таблицы uchet. t1 - это алиас https://www.w3schools.com/sql/sql_alias.asp
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.