Запрос не возвращает правильные данные

Payment_Detail_Table

payment_detail_id| payment_id | payment_status | total | user_id | company_id
10001            |          10|    1           | 100        1          103
10002            |          11|    2           | 200        1          103
10003            |          12|    2           | 300        2          104
10004            |          13|    1           | 400        2          104
10005            |          14|    0           | 500        1          105
10006            |          15|    2           | 600        1          103

Payment_Table

payment_id| payment_type| 
10        |          1  |    
11        |          1  |    
12        |          1  |    
13        |          1  |    
14        |          0  |    
15        |          0  |

Как получить user_id с payment_type из 1 и payment_type из 0 из Payment_Table?

Цель состоит в том, чтобы обнаружить, что они сделали два вида платежей, и для тех, кто заплатил два из них, они должны иметь payment_status или 2, но если например, если user_id - это 1, а company_id - это 103, выход должен быть 100+200+600=900.

У этого пользователя с этим company_id есть payment_Type, 0 и 1, и для этих двух условий (payment_type=1 and payment_type=0) успешно завершил их с помощью payment_Status из 2, даже несмотря на то, что ранее у него был неудачный платеж.

Например, payment_detail_id - это 1001, есть payment_status из 1.

Пожалуйста, используйте знаки препинания в формулировке проблемы. Сложно уследить.

Tim Biegeleisen 26.07.2018 08:51

@TimBiegeleisen Извините за это, потому что я новичок в stackoverflow, и мне нужно было более быстрое решение.

Maximilian 26.07.2018 08:58

Вы можете добавить сюда, как выглядит ваш результат

alimbaronia 26.07.2018 09:04

См. meta.stackoverflow.com/questions/333952/…

Strawberry 26.07.2018 09:11
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
4
41
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

SELECT
  DISTINCT user_id
FROM
  Payment_Detail_Table D
WHERE
  EXISTS(
    SELECT
      *
    FROM
      Payment_Table P1
    WHERE
      P1.payment_id = D.payment_id
    AND
      P1.payment_type = 1
  )
AND
  EXISTS(
    SELECT
      *
    FROM
      Payment_Table P2
    WHERE
      P2.payment_id = D.payment_id
    AND
      P2.payment_type = 0
   )

Я не понимаю остального вопроса (после «Цель - найти ...»)

memo 26.07.2018 09:18

И почему вы думаете, что это правильный ответ, если вы понимаете только половину вопроса?

Nico Haase 26.07.2018 10:42

@NicoHaase Это ответ на первую часть (на самом деле это единственный задаваемый вопрос: «Как получить user_ids, у которых payment_type = 1, и payment_type = 0, из Payment_Table?»)

memo 26.07.2018 10:46
Ответ принят как подходящий

Это то, что вы ищите ?

SELECT user_id, company_id
FROM (select payment_detail_table.user_id AS user_id,payment_detail_table.company_id AS company_id
from payment_detail_table
where (EXISTS(SELECT * FROM payment_table WHERE payment_table.payment_id=payment_detail_table.payment_id AND payment_table.payment_type=1)) AND payment_detail_table.payment_status = 2
group by concat(payment_detail_table.user_id,'-',payment_detail_table.company_id)) T1
INNER JOIN
(SELECT payment_detail_table.user_id AS user_id,payment_detail_table.company_id AS company_id
FROM (select payment_detail_table.user_id AS user_id,payment_detail_table.company_id AS company_id
from payment_detail_table
where (EXISTS(SELECT * FROM payment_table WHERE payment_table.payment_id=payment_detail_table.payment_id AND payment_table.payment_type=0)) AND payment_detail_table.payment_status = 2
group by concat(payment_detail_table.user_id,'-',payment_detail_table.company_id)) T2
USING (user_id, company_id)

Другие вопросы по теме

Похожие вопросы

MySQL - скопируйте базу данных, затем удалите данные или новую базу данных, затем вставьте, между производительностью
Как использовать один запрос вместо нескольких
Теги заказа со спичками вверху
«ВСТАВИТЬ ГДЕ НЕ СУЩЕСТВУЕТ» - работает на локальном (5.6.35), но не на сервере (5.7.22) - ошибки не отображаются
Группировать по комбинации двух полей, а затем сортировать по сумме каждой группы, несколько аннотаций django
Зашифрованный идентификатор электронной почты нечувствителен к регистру MySQL
Я хочу показать виртуальный столбец, который показывает имя таблицы, из которой извлекаются относительные данные
Как отобразить результаты в mybatis после передачи строк mysql в столбцы?
Как изменить столбец типа Varchar на столбец типа даты без потери данных
Как выполнить вычитание между таблицами и объединить только строку с наименьшей разницей с помощью SQL?