Frage

I need to somehow check if query result is NULL, MySQL returns error Subquery returns more than 1 row. How should I rewrite it in order to work correctly please?

SELECT DISTINCT user.id, user.username, user.name, user.surname, user.avatar,
(SELECT IF(ISNULL(
  (SELECT attendant.fk_user AS u
  FROM attendant
  WHERE fk_event = 1

  UNION

  SELECT organizer.fk_user AS u
  FROM organizer
  WHERE fk_event = 1

  UNION

  SELECT invitation.fk_user_to AS u
  FROM invitation
  WHERE fk_event = 1)), NULL, 1)) AS related
  ...
War es hilfreich?

Lösung 3

I've solved it after few hours of trying and googling. This post on stackoverflow was helpful. Instead of IF and ISNULL there should be used CASE WHEN EXISTS like this:

SELECT DISTINCT user.id, user.username, user.name, user.surname, user.avatar,
CASE WHEN EXISTS
  (SELECT attendant.fk_user AS u
  FROM attendant
  WHERE fk_event = 1
  AND fk_user = `user`.id

  UNION

  SELECT organizer.fk_user AS u
  FROM organizer
  WHERE fk_event = 1
  AND fk_user = `user`.id

  UNION

  SELECT invitation.fk_user_to AS u
  FROM invitation
  WHERE fk_event = 1
  AND fk_user_to = `user`.id) THEN 1 ELSE 0 END AS related
  ...

Andere Tipps

Change your subquery select to count(*) e.g.

select o.OrderID, o.OrderAmount
from Orders o
where (select count(id) from Disputes d where d.CustomerID = o.CustomerID) <= 0

Or a little bit simpler is to use "WHERE EXISTS".

SELECT DISTINCT store_type FROM stores
WHERE EXISTS (SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type);

For details see: https://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html

And for the subqueries use

FROM ( subquery1 union subqueryN) AS related

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top