-- File: send_more_money_v2.sql -- Version: 2.0 -- Last Changed: 2017-12-04 -- by: Damir; https://www.damirsystems.com -- Project: Send More Money Puzzle -- DB: PostgreSQL, MS SQL Server with Digit as ( -- {0, 1, ... 9} select z from ( values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9) ) as x(z) ) -- Cartesian product and constraints select St.z as S , Et.z as E , Nt.z as N , Dt.z as D , Mt.z as M , Ot.z as O , Rt.z as R , Yt.z as Y from Digit as St join Digit as Et on Et.z != St.z join Digit as Nt on Nt.z not in (St.z, Et.z) join Digit as Dt on Dt.z not in (St.z, Et.z, Nt.z) join Digit as Mt on Mt.z not in (St.z, Et.z, Nt.z, Dt.z) join Digit as Ot on Ot.z not in (St.z, Et.z, Nt.z, Dt.z, Mt.z) join Digit as Rt on Rt.z not in (St.z, Et.z, Nt.z, Dt.z, Mt.z, Ot.z) join Digit as Yt on Yt.z not in (St.z, Et.z, Nt.z, Dt.z, Mt.z, Ot.z, Rt.z) where Mt.z = 1 and St.z >= 8 and (Dt.z + Et.z) % 10 = Yt.z and Dt.z * 1 + Nt.z * 10 + Et.z * 100 + St.z * 1000 + Et.z * 1 + Rt.z * 10 + Ot.z * 100 + Mt.z * 1000 = Yt.z * 1 + Et.z * 10 + Nt.z * 100 + Ot.z * 1000 + Mt.z * 10000 ;